概念,訊息內容,訊息迴圈結構構成,
概念
呼叫UpdateWindow之後,視窗就出現在視訊顯示器上。程式現在必須準備讀入使用者用鍵盤和滑鼠輸入的資料。Windows為當前執行的每個Windows程式維護一個「訊息佇列」。在發生輸入事件之後,Windows將事件轉換為一個「訊息」並將訊息放入程式的訊息佇列中。
訊息內容
程式通過執行一塊稱之為「訊息迴圈」的程式碼從訊息佇列中取出訊息:
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
msg變數是型態為MSG的結構,型態MSG在WINUSER.H中定義如下:
typedef struct tagMSG
{
HWND hwnd ;
UINT message ;
WPARAM wParam ;
LPARAM lParam ;
DWORD time ;
POINT pt ;
}
MSG, * PMSG ;
POINT資料型態也是一個結構,它在WINDEF.H中定義如下:
typedef struct tagPOINT
{
LONG x ;
LONG y ;
}
POINT, * PPOINT;
訊息迴圈以GetMessage呼叫開始,它從訊息佇列中取出一個訊息:
GetMessage (&msg, NULL, 0, 0)
訊息迴圈結構構成
這一呼叫傳給Windows一個指標,指向名為msg的MSG結構。第二、第三和第四個參數設定為NULL或者0,表示程式接收它自己建立的所有視窗的所有訊息。Windows用從訊息佇列中取出的下一個訊息來填充訊息結構的各個欄位,結構的各個欄位包括:
hwnd 接收訊息的視窗代號。在HELLOWIN程式中,這一參數與CreateWindow傳回的hwnd值相同,因為這是該程式擁有的唯一視窗。
message 訊息識別字。這是一個數值,用以標識訊息。對於每個訊息,均有一個對應的識別字,這些識別字定義於Windows表頭檔案(其中大多數在WINUSER.H中),以字首WM(「window message」,視窗訊息)開頭。例如,使用者將滑鼠游標放在HELLOWIN顯示區域之內,並按下滑鼠左按鈕,Windows就在訊息佇列中放入一個訊息,該訊息的message欄位等於WM_LBUTTONDOWN。這是一個常數,其值為0x0201。
wParam 一個32位元的「message parameter(訊息參數)」,其含義和數值根據訊息的不同而不同。
lParam 一個32位元的訊息參數,其值與訊息有關。
time 訊息放入訊息佇列中的時間。