關於CCmdTarget及訊息對映
CCmdTarget類直接繼承自CObject,主管應用程式架構,其向下直接派生出CWnd,而CWnd是所有控制元件、框架視窗、對話方塊、檢視類的父類。
CCmdTarget類是可以在裡面使用訊息對映的類,其派生的所有類都有訊息對映函式。能用訊息對映的類的基類都必須是CCmdTarget類。
CCmdTarget類的派生類在標頭檔案中都必須提供DECLARE_MESSAGE_MAP()巨集,在類的CPP檔案中都有相應的BEGIN_MESSAGE_MAP(當前類, 直接父類)和END_MESSAGE_MAP()巨集與之對應,這兩個巨集之間(我稱之為巨集段)定義的就是在這個類中宣告的訊息對映巨集。訊息對映巨集有三種: ON_COMMAND(控制元件ID,響應函式),ON_NOTIFY(通知程式碼, 控制元件ID, 響應函式),ON_MESSAGE(訊息,響應函式)。
訊息對映巨集放在哪個類中要看基響應函式定義在哪個類中,訊息對映巨集中使用的響應函式必須是當前類的成員函式或者是當前類的直接父類(在BEGIN_MESSAGE_MAP括號中出現的兩個)的成員函式。如果訊息響應函式是在當前類中定義的,那麼一般會在標頭檔案中對該函式的宣告前加上afx_msg。訊息響應函式一般是沒有引數列表和返回值的。
ON_NOTIFY(通知程式碼, 控制元件ID, 響應函式)中的通知程式碼是一個NMHDR結構型別的資料或者是一個擴充套件的NMHDR結構型別(第一個資料成員是NMHDR結構型別的結構型別資料),對於擴充套件的NMHDR結構型別,由於其第一個資料成員是NMHDR結構型別,因而使用指定可以方便地轉換為NMHDR結構型別。
NMHDR結構型別的定義如下:其中的code是個常量資料(不同控制元件定義的)。
typedef struct tagNMHDR {
HWND hwndFrom;
UINT idFrom;
UINT code;
} NMHDR;
擴充套件的NMHDR結構型別中增加的資料會據其所使用的控制元件不同而有不同的資料。
ON_MESSAGE(訊息,響應函式)中的訊息是?
DECLARE_MESSAGE_MAP()這個巨集裡定義了GetThisMessageMap()和GetMessageMap()這兩個函式(這兩個函式都是在CCmdTarget類中宣告定義的),因而可以在類檢視中看到這兩個函式。在h檔案和cpp檔案中看不到這兩個函式就是DECLARE_MESSAGE_MAP()這個巨集就是它倆。
相關文章
- MFC 訊息對映機制詳解
- VC++訊息對映的思考 (轉)C++
- 關於NSNotificationCenter訊息通訊用法
- 請教關於物件與關係間的對映物件
- [譯] 關於 PHP 7.4 的最新訊息PHP
- JPA關係對映系列四:many-to-many 關聯對映
- mybatis關聯關係對映MyBatis
- 自定義訊息和對訊息的理解
- 關於Beego ORM和 request body 的對映問題GoORM
- python 關係對映Python
- hibernate之關於使用連線表實現多對一關聯對映
- MFC六大核心機制之五、六:訊息對映和命令傳遞
- IP對映原理及怎樣把內網IP對映外網內網
- KafkaConsumer對於事務訊息的處理Kafka
- Hibernate 的關聯關係對映
- Mybatis實體關聯對映MyBatis
- java物件關係對映ROMJava物件
- hiberate關係對映大全
- 關於Android訊息機制的那些事兒Android
- 關於URL連結對映到檔案目錄的問題
- 請教一個關於hibernate對映oracle的問題Oracle
- JPA關係對映系列五:many-to-many 關聯表存在額外欄位關係對映
- 關於MQ的幾件小事(六)訊息積壓在訊息佇列裡怎麼辦MQ佇列
- MyBatis實現一對一關聯對映MyBatis
- hibernate(三) 一對多對映關係
- 訊息佇列MQ應用場景及主流框架對比佇列MQ框架
- 關於 appium 獲取不到 toast 訊息的討論APPAST
- MongoDB、Java與物件關係對映MongoDBJava物件
- MongoDB、Java和物件關係對映MongoDBJava物件
- 關於struts2 action中map型別屬性的對映型別
- 訊息佇列效能對比佇列
- 訊息處理:利用控制元件的動態派生[RunTime],為控制元件新增該控制元件未定義的訊息對映 (轉)控制元件
- hibernate 關係對映之 主鍵關聯一對一
- 淺談訊息佇列及常見的訊息中介軟體佇列
- 關於 SAP UI5 MessageProcessor 訊息建立的問題UI
- 關於捕獲VCL沒有處理的Windows訊息 (轉)Windows
- (緊急求助)關於jive訊息過濾的實現相關問題
- 關於Docker compose值IP與域名的對映 之 extra_hostDocker