一般情況下的消息處理如下,TranslateMessage轉換virtual-keys消息到characters消息,DispatchMessage調度一個消息給窗口程序。
//getMessage第二個參數為HWND,這里設置為NULL, //如果設置為hwnd,WM_DESTROY消息會響應不到 while(getMessage(&msg,NULL,0,0) { TranslateMessage(&msg); DiapatchMessage(&msg); }
如果窗口含有一個非模態對話框,需要使用IsDialogMessage判斷是否為特定對話框的消息,並處理之。
while(getMessage(&msg,NULL,0,0) { if(hDlgModeless==0||IsDialogMessage(hDlgModeless,&msg) { TranslateMessage(&msg); DiapatchMessage(&msg); }
}
如果要處理快捷鍵還需要提前通過TranslateAccelerator處理快捷鍵消息。
while (GetMessage(&msg, NULL, 0, 0)) { if (hDlgModeless == 0 || !IsDialogMessage(hDlgModeless, &msg)) { if (!TranslateAccelerator(hwnd, hAccel, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } }