標籤:windows 編程 win32 應用程式 message
一 Win32訊息機制
1 訊息機制
過程驅動:程式是按照我們預先定義好的順序執行,每執行一步,下一步都已經按照預定的順序繼續執行,直到程式結束
事件驅動: 程式的執行順序是無序的。某個事件點所執行的代碼,是由外界通知。由於我們無法決定使用者執行順序,所以代碼的執行也是無序
Win32的訊息機制 - 事件驅動
2 Win32訊息程式
2.1 Win32 視窗註冊
2.2 Win32視窗建立
2.3 Win32訊息迴圈
2.3.1 GetMessage
BOOL GetMessage( LPMSG lpMsg, // message information 存放擷取到的訊息資料 HWND hWnd, // handle to window 擷取訊息的視窗控制代碼 UINT wMsgFilterMin, // first message訊息過濾器的起始訊息
UINT wMsgFilterMax // last message訊息過濾的終止訊息
);
返回值: 成功擷取訊息返回TRUE, 但是當擷取到 WM_QUIT訊息時 返回FALSE
PostQuitMessage : 發送一條WM_QUIT 訊息
MSG - 由系統填寫關於訊息的參數
hWnd - GetMessage會根據hWnd值,接收由hWnd指定的視窗的訊息
wMsgFilterMin wMsgFilterMax - 訊息過濾器 要求GetMessage接收指定範圍的訊息
2.3.2 DispatchMessage
LRESULT DispatchMessage( CONST MSG *lpmsg // message information);
根據訊息資料內的視窗控制代碼,找到這個視窗的訊息處理函數, 調用函數,進行訊息處理,如果訊息結構中的hWnd為NULL,將不做任何處理
2.3.3 TranslateMessage
BOOL TranslateMessage( CONST MSG *lpMsg // message information);
將鍵盤訊息轉換成字元訊息
1、首先檢查是否是鍵盤按鍵訊息
2、如果發現是按鍵訊息,將根據按鍵產生一個字元訊息,在下一個GetMessage執行時會收到字元訊息
3、如果未發現按鍵訊息,不做任何處理
2.4 Win32基本訊息
2.4.1 WM_DESTROY ::視窗銷毀時的訊息,可以做退出或善後處理
2.4.2 WM_CREATE : 視窗建立訊息,是在視窗建立後,視窗處理函數收到的第一條訊息,可以在這個訊息內做資料初始化/建立子視窗等
2.4.3 WM_SIZE:當視窗大小發生變化時,會收到這個訊息。可以在這個訊息中調整視窗的布局
wParam - SIZE發生變化時的標識
LOWORD(lParam) 客戶區的寬
HIWORD(lParam) 客戶區的高
2.4.4 WM_SYSCOMMAND:系統命令訊息,當點擊系統功能表和按鈕時會收到這個訊息,可以再訊息中,提示使用者儲存資料等。
wParam 系統命令類型
LOWORD(lParam) 滑鼠x座標
HIWORD(lParam) 滑鼠y座標
2.4.5 WM_ACTIVEAPP:應用程式啟用
2.4.6 WM_PAINT 繪圖訊息
2.4.7 鍵盤訊息
2.4.8 鍵盤訊息
2.4.9 WM_TIMER 定時器訊息
2.5 訊息結構
MSG - 訊息結構
typedef struct tagMSG { HWND hwnd; //訊息發生的視窗 UINT message; //訊息ID WPARAM wParam; //訊息參數 LPARAM lParam; //訊息參數 DWORD time; //訊息發生的時間 POINT pt; //訊息發生時滑鼠的位置} MSG, *PMSG;