所謂Windows程序設計,就是編寫Windows系統的窗口應用程序。
Windows是個多任務/多線程的操作系統,并且還是一個事件驅動的操作系統。在Windows操作系統中,無論是系統產生的動作還是用戶在運行應用程序發出的操作動作都稱為事件,而消息就是用于描述某個事件發生的信息,可以說,事件是因,消息是果。例如,按下了鼠標左鍵,就是一個事件,同時系統也會產生一條特定的消息來描述這個按鍵事件。
Windows中每一個消息所包括的信息用一個MSG結構體來表示,其定義如下:
typedef struct tagMSG{
HWND hwnd; //獲取消息窗口句柄
UINT message; //消息標識符(對應整數表示)
WPARAM wParam; //記錄消息附加信息的字參數
LPARAM lParam; //記錄消息附加信息的長度參數
DWORD time; //消息被發送到消息隊列的時間
POINT pt; //消息發送時光標所在位置
}
用戶或應用程序的某些行為產生一些事件,操作系統遭到事件所屬的應用程序,發送對應的消息。然后,該消息就被加入到該應用程序的消息隊列之中。之后,應用程序不斷的檢查消息隊列。每當檢查到一條消息時,應用程序就將該消息發給與該消息所屬窗口相關的窗口過程(WndProc)。最后,窗口過程執行與當前消息對應的指令。

圖1.事件驅動模型
具體一點,Windows編程中的消息處理過程:
1.GetMessage()函數不斷偵聽應用程序的消息隊列。
2.得到MSG,TranslateMessage()把標識的消息的整數翻譯為對應的常量符,如代表窗口的消息整數翻譯成WM_XXX消息表示形式,并分析解釋有關信息。
3.DispatchMessage()函數通知Windows把每個消息分發給相應的窗口函數。應用程序并不直接調用窗口函數,而由Windows根據消息去調用窗口函數,因此,窗口函數也被稱為回調函數。
句柄(handle)是Windows編程中的一個重要的概念。句柄是一個4字節長的整數值,是應用程序中不同對象的編號,每個對象的句柄是唯一的,應用程序通過句柄來訪問相應的對象。