一般情况下的消息处理如下,TranslateMessage转换virtual-keys消息到characters消息,DispatchMessage调度一个消息给窗口程序。
//getMessage第二个参数为HWND,这里设置为NULL,
//如果设置为hwnd,WM_DESTROY消息会响应不到
while(getMessage(&msg,NULL,,)
{
TranslateMessage(&msg);
DiapatchMessage(&msg);
}
如果窗口含有一个非模态对话框,需要使用IsDialogMessage判断是否为特定对话框的消息,并处理之。
while(getMessage(&msg,NULL,,)
{
if(hDlgModeless==||IsDialogMessage(hDlgModeless,&msg)
{
TranslateMessage(&msg);
DiapatchMessage(&msg); }
}
如果要处理快捷键还需要提前通过TranslateAccelerator处理快捷键消息。
while (GetMessage(&msg, NULL, , ))
{
if (hDlgModeless == || !IsDialogMessage(hDlgModeless, &msg))
{
if (!TranslateAccelerator(hwnd, hAccel, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}