对窗口过程函数WndProc()的一点理解
函數原型:
?????????LRESULTCALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
?????????窗口過程函數決定了當一個窗口從外界接收到不同的信息時,所采取的不同反應,即主要用于處理發送給窗口的信息。hwnd是要處理窗口的句柄;message是消息ID,代表了不同的消息類型;wParam和lParam代表了消息的附加信息,附加信息會隨著消息類型的不同而不同。
?????????當鍵盤消息發出時,wParam的值為按下按鍵的虛擬鍵碼,lParam則存儲按鍵的相關狀態信息。因此,如果窗口對傳入的鍵盤消息處理時,只需要判斷wParam的值即可。
?????????當鼠標消息發出時,wParam值為鼠標按鍵的信息,而lParam則儲存鼠標的坐標,高字節代表y坐標,低字節代表x坐標。即g_y =HIWORD(lParam), g_x = LOWORD(lParam)
?????????常見窗口過程函數框架如下:
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
?? ?switch(message)?? ?//根據不同的消息類型進行不同的處理
?? ?{
?? ??? ?case WM_PAINT:?? ?//若是客戶區重繪消息
?? ??? ??? ?Window_Paint();?? ?//調用窗口繪制函數
?? ??? ??? ?ValidateRect(hwnd, NULL);?? ?//更新客戶區的顯示,使無效區域變有效
?? ??? ??? ?break;
?
?? ??? ?case WM_KEYDOWN:?? ?//若是鍵盤按下消息
?? ??? ??? ?if(wParam == VK_ESCAPE)?? ?//若是ESC鍵
?? ??? ??? ??? ?DestroyWindow(hwnd);?? ?//摧毀窗口并發送一條WM_DESTROY消息
?? ??? ??? ?break;
?
?? ??? ?case WM_DESTROY:?? ?//若是窗口摧毀消息
?? ??? ??? ?Window_CleanUp();?? ?//先調用資源清理函數清理掉預先的資源
?? ??? ??? ?PostQuitMessage(0);?? ?//向系統表明有個線程有終止請求,用來響應WM_DESTROY消息
?? ??? ??? ?break;
?? ?
?? ? ? ? ? ?default:
?? ??? ? ? ? ? ?return DefWindowProc(hwnd, message, wParam, lParam);?? ?//調用默認窗口過程為應用程序沒有處理的窗口消息提供默認的處理
? ? ? ? }
? ? ? ? return 0;
}
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的对窗口过程函数WndProc()的一点理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Idea 同一工程根据不同配置文件启动、
- 下一篇: 解决:springcloud eurek