나는 char 배열을 사용하여 동적 메시지 박스를 만들려면,하지만 난 진 U 타입 (UINT)와 함께 몇 가지 문제가있다 ..동적 메시지 박스 사용 변수 (C++)
당신이 내 코드를 볼 경우, 내가 먼저 문자를 문자열 | 구분 기호가 있으며 배열 "a"로 파싱됩니다. 그럼 내가 UINT로 내 숯불로 변환하지만 난 그것을 작동시키지 못할, 그냥 메시지 상자를 보여주지 않습니다. :-)
char str[] ="Testing message|Title Message|MB_OK|MB_ICONINFORMATION";
char * pch;
char * a[4];
int i = 0;
pch = strtok (str,"|");
while (pch != NULL)
{
a[i] = pch;
pch = strtok (NULL, "|");
//cout << a[i];
i++;
}
char test[1000] = "";
strcat_s (test,a[2]);
strcat_s (test,"|");
strcat_s (test,a[3]);
UINT y;
stringstream s;
s << test;
s >> y;
MessageBox(0,a[0],a[1],y);
Sleep(10000);
해결을 돕는 감사 :
UINT x;
if(!strcmp(a[3],"MB_ICONERROR")){
x = 0x10;
}else if(!strcmp(a[3],"MB_ICONEXCLAMATION")){
x = 0x30;
}else if(!strcmp(a[3],"MB_ICONINFORMATION")){
x = 0x40;
}else if(!strcmp(a[3],"MB_ICONQUESTION")){
x = 0x20;
}
if(!strcmp(a[2],"MB_OK")){
x = x + 0;
}else if(!strcmp(a[2],"MB_OKCANCEL")){
x = x + 1;
}else if(!strcmp(a[2],"MB_YESNO")){
x = x + 4;
}else if(!strcmp(a[2],"MB_YESNOCANCEL")){
x = x + 3;
}else if(!strcmp(a[2],"MB_RETRYCANCEL")){
x = x + 5;
}else if(!strcmp(a[2],"MB_ABORTRETRYIGNORE")){
x = x + 2;
}
MessageBox(0, a[0], a[1], x);
이 죄송합니다, 끔찍한 C++ 코드입니다. 레거시 C 함수가 아닌 적절한 C++ 기능을 사용하십시오. –
나는 당신이 어떻게 제대로하는지보고 싶다. 나는 C++을 처음 사용한다. – yves
주로 char const * 대신에'std :: string'을 사용한다. (특히 고정 버퍼!),'strcmp'를 사용할 필요가 없다. (대신' 'strtok' 대신에'std :: find'와 유사한 알고리즘을 사용하십시오. (strtok =='') 또는'strcat' (오버 플로우하는 경향이 있고'+'또는'+ ='를 사용하십시오. –