我写windows 32程序,主窗口是一个dialog,相关代码如下: MessageBox(NULL,TEXT("设置失败!"),TEXT("haha"),MB_OKCANCEL); // 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg) && (hDlg == 0 || !IsDialogMessage(hDlg,&msg)))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}程序运行后,对话框显示出来,为什么上面代码中的MessageBox没有反应(没有messagebox弹出),这个明明是在主消息循环之前就应该执行的?我想应该跟消息到来的先后顺序有关,但是想不明白具体怎么回事,麻烦高手指点下!
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg) && (hDlg == 0 || !IsDialogMessage(hDlg,&msg)))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}程序运行后,对话框显示出来,为什么上面代码中的MessageBox没有反应(没有messagebox弹出),这个明明是在主消息循环之前就应该执行的?我想应该跟消息到来的先后顺序有关,但是想不明白具体怎么回事,麻烦高手指点下!
没有执行到 MessageBox 这句话换单文档可以
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine); // TODO: 在此放置代码。
MSG msg;
HACCEL hAccelTable; // 初始化全局字符串
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_ZYLBADA, szWindowClass, MAX_LOADSTRING);
/*MyRegisterClass(hInstance);*/ /*我直接creatdialog的,所以注释掉这个*/
// 执行应用程序初始化:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
} hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_ZYLBADA));
MessageBox(NULL,TEXT("设置失败!"),TEXT("haha"),MB_OKCANCEL);
// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg) && (hDlg == 0 || !IsDialogMessage(hDlg,&msg)))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} return (int) msg.wParam;
}
我没你说的这么牛X,看《Programming Windows》 Fifth Edition,windows and messages
不应该是这样,如果我想改变默认的消息处理方式,就得返回TRUE,否则WINDOWS是继续处理这个消息的,5楼朋友好像说反了
那俺请你再仔细看看。有很多Windows消息需要返回特殊的,如HANDLE,BOOL,LRESULT,当然要求返回0的也有