函數原型:
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;
}