MFC學習筆記2 訊息對映

2021-07-14 13:08:32 字數 1361 閱讀 6298

mfc庫並沒有採用虛函式來處理windows訊息,而是通過一些巨集來講特定的訊息對映到派生類中相應的成員函式內。mfc採用的document/view框架結構,能夠將資料管理的**和顯示資料的程式**分開,並且設計了一套方便的訊息對映和命令傳遞機制,方便開發。

在mfc下,訊息對映是通過巧妙的訊息對映**來進行的訊息對映和命令傳遞。

首先在需要進行訊息處理的類的標頭檔案.h中都會包含declare_message_map()巨集,用來宣告改類擁有訊息的對映**:

class cscribbledoc:public cdocument

然後在類的.cpp中實現這一**:

begin_message_map(cinheritclass, cbaseclass)    //該巨集具有兩個引數擁有訊息**的類及其父類

//}afx_msg_map //由classwizard生成,對程式無影響

end_messags_map() //該巨集最為結尾符號

上述**主要進行訊息對映的實現,其中出現如下3種巨集:

①begin_message_map巨集具有兩個引數,分別是擁有訊息**的類及其父類

②on_command巨集用於指定命令訊息的處理函式名稱。

③end_messags_map巨集作為結尾符號

標頭檔案中declare_message_map的定義如下:

#define declare_message_map()

private:

static const afx_msgmap_entry_messageentries;

protected:

static afx_data const afx_msgmap messagemap;

virtual const afx_msgmap* getmessagemap() const;

上述**包含mfc新定義的兩個資料結構,afx_msgmap_entr源**如下:

//包含了乙個訊息的所有相關資訊

struct afx_msgmap_entry

;

afx_msgmap的源**如下:

structafx_msgmap

mfc把所有訊息一條條填入afx_msgmap_entry結構中去,形成乙個陣列,同時通過afx_msgmap獲得該陣列的首位址,同時得到基類的訊息對映入口位址。當本身對該訊息不響應時就可以上溯到基類的訊息對映表中尋找對應的訊息響應。

MFC學習筆記 訊息對映機制afx

前面已經說過,windows應用程式是訊息驅動的。在mfc軟體開發中,介面操作或者執行緒之間通訊都會經常用到訊息,通過對訊息的處理實現相應的操作。比較典型的過程是,使用者操作視窗,然後有訊息產生,送給視窗的訊息處理函式處理,對使用者的操作做出響應。視窗訊息一般由三個部分組成 1.乙個無符號整數,是訊...

MFC學習筆記之訊息對映機制

0x00 windows應用程式都是訊息驅動,其中mfc,其介面操作或者執行緒間通訊是通過處理訊息實現相應的操作,如使用者在操作視窗時會產生訊息,將其送給視窗的訊息處理函式,對使用者的操作做出對應的響應。0x01 訊息 mfc的視窗訊息含三個部分 1 訊息值 乙個無符號整數,經常被定義為巨集 2 訊...

MFC訊息對映

run這個函式來建立和處理訊息迴圈 bool afxapi afxinternalpumpmessage return true 顯而易見,mfc中處理訊息也是利用了win32下的訊息處理 那麼還是這樣的結構 typedef struct tagmsg msg 有了這個概念之後我們知道,mfc通過訊...