win32 Message(MSG)消息處理


一般情況下的消息處理如下,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);
            }
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM