MFC的訊息傳遞機制

2021-04-13 22:18:31 字數 615 閱讀 8691

今天又研究了一下mfc的訊息傳遞機制,發現mfc的訊息傳遞也沒那麼複雜。簡單的就是那麼幾個要點:

1、用巨集定義了乙個訊息表,每個類一張表,父類子類通過指標連線,構成乙個訊息網。表裡面每項就定義了訊息號、id號和函式執行入口及函式引數形式。得到乙個訊息,就和表裡面的項比較,訊息一樣的就執行對應的函式。

2、每個視窗必須有個視窗訊息處理函式,而mfc中cwnd封裝了乙個視窗訊息處理函式,凡是cwnd派生的,都呼叫那個視窗訊息處理函式。而這個視窗訊息處理函式,呼叫了兩個函式,乙個是處理我們想處理的訊息,叫視窗函式a,乙個是處理我們不處理的訊息,給系統default處理的,叫視窗函式b。 

3、諸多從cwnd派生出來的類,都改寫了cwnd的視窗訊息處理函式中的視窗函式a,於是在不同的派生類中,都執行我們改寫過的視窗函式a,我們就可以隨便把訊息繞來繞去了。而且因為派生類的視窗函式a名稱都一樣的,所以我們只要獲得其它派生類的指標,呼叫它的視窗函式a,就把訊息繞到那個類上面了。

訊息繞行部分說白了就是虛函式的妙用。

當然,還有個什麼hook,在某些情況下發過來的訊息,都會給hook指定的函式過濾執行一些動作,這個俺就是不太懂了。

不過我發現,在doc/view結構中,最底層的ccmdtarget的訊息處理部分給重複呼叫了好多次。

mfc 訊息傳遞

訊息分類 windows的訊息都是以wm 為名,wm 的意思是 windows message mfc把訊息分為三大類 命令訊息 wm command 命令訊息意味著 使用者命令程式做某些操作 凡是ui物件產生的訊息都是這種命令訊息,可能來自選單或加速鍵或工具欄按鈕,並且都以wm command呈現...

mfc 訊息傳遞

mfc 傳送訊息sendmessage 自定義訊息 define wm refresh wm user 200 點選子窗體按鈕時,傳送訊息sendmessage pfartherdialog hwnd,wm refresh,wparam m data,lparam nbufsize pfarther...

MFC 訊息機制

windows應用程式是通過訊息驅動的,在mfc軟體開發時,進行介面操作經常要用到訊息,通過訊息對應的處理函式來實現響應的操作。比如,使用者操作視窗,就會產生訊息,送給對應的訊息處理函式進行處理,對使用者的操作做出一些反應。mfc使用訊息對映機制來處理訊息,具體表現就是訊息和訊息處理函式一一對應的訊...