1. 程式人生 > >Windows訊息基本概念及訊息系統(第一講)

Windows訊息基本概念及訊息系統(第一講)

一、訊息的基本概念


訊息(Message)指的就是Windows 作業系統發給應用程式的一個通告,它告訴應用 程式某個特定的事件發生了。比如,使用者單擊滑鼠或按鍵都會引發Windows 系統傳送相應 的訊息。最終處理訊息的是應用程式的視窗函式,如果程式不負責處理的話系統將會作出默 認處理。

從資料結構的角度來說,訊息是一個結構體,它包含了訊息的型別識別符號以及其他的 一些附加資訊。比如對於滑鼠單擊產生的訊息而言,它就包含了視窗控制代碼、此訊息的常量識別符號、滑鼠的位置座標等相關資訊。

Windows系統定義了許多訊息常量,包括標準的Windows訊息、通知訊息、命令訊息等等。這些訊息常量通常具有XX_YYYY的形式,其他XX通常代表訊息的型別,而後面的YYYY通常是這個訊息所對應事件的英文縮寫。比如WM_LBUTTONDOWN代表的事件就是按下了滑鼠左鍵。

二、windows的訊息系統

Windows的訊息系統由3個部分組成:

訊息佇列。Windows作業系統本身維護了一個系統訊息佇列,而對於每一個正在執行的Windows應用程式,系統會為其建立一個應用程式訊息佇列。應用程式可以從這個訊息佇列中獲取訊息,然後分派給對應的視窗。

訊息迴圈。Windows應用程式中都包含了一段稱作“訊息迴圈(也稱訊息泵)”的程式碼,用來從訊息佇列中檢索訊息並把他們分發到相應的視窗函式中。正是這個訊息迴圈使得一個應用程式能夠響應外部的各種事件,所以訊息迴圈往往是一個Windows應用程式的核心部分。

視窗函式(也叫視窗過程)。最終為了處理各種訊息,Windows應用程式所建立的每個視窗(廣義,包括實際視窗、控制元件等諸如此類的的內容)都會在系統中註冊一個相應的視窗函式,此視窗函式從形式上看一個巨大的switch語句,用以處理由訊息迴圈傳送到該視窗的各種訊息。視窗函式是一種回撥函式(Callback Function),也就是說,它是由Windows作業系統負責呼叫的,而應用程式本身不能呼叫它。

Windows作業系統中的訊息從發生到被處理一般有5個步驟:
(1)系統發生了一個事件。
(2)Windows系統把事件翻譯為對應的訊息,並把它放到訊息佇列中。
(3)應用程式從訊息佇列中獲取訊息,然後把它封裝在TMsg結構中。
(4)應用程式通過訊息迴圈把訊息分派給對應的視窗函式。
(5)視窗函式負責最終處理這個訊息。

下圖顯示了這樣的處理過程
這裡寫圖片描述