關於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訊息對映
- 關於RocketMQ的順序訊息MQ
- JPA關係對映系列四:many-to-many 關聯對映
- python 關係對映Python
- mybatis關聯關係對映MyBatis
- [譯] 關於 PHP 7.4 的最新訊息PHP
- Hibernate 的關聯關係對映
- KafkaConsumer對於事務訊息的處理Kafka
- Mybatis實體關聯對映MyBatis
- java物件關係對映ROMJava物件
- JPA關係對映系列五:many-to-many 關聯表存在額外欄位關係對映
- MFC六大核心機制之五、六:訊息對映和命令傳遞
- MyBatis實現一對一關聯對映MyBatis
- 關於Docker compose值IP與域名的對映 之 extra_hostDocker
- 關於 appium 獲取不到 toast 訊息的討論APPAST
- Spring Boot 入門系列(二十八) JPA 的實體對映關係,一對一,一對多,多對多關係對映!Spring Boot
- 關於MQ的幾件小事(六)訊息積壓在訊息佇列裡怎麼辦MQ佇列
- 訊息佇列MQ應用場景及主流框架對比佇列MQ框架
- Hibernate (開源物件關係對映框架)物件框架
- 關於 SAP UI5 MessageProcessor 訊息建立的問題UI
- 關於錯誤訊息 RangeError - Maximum call stack size exceeded at XXXError
- 對映
- 終於等到你,《狼人對決》版號最新訊息來襲!
- day07-MyBatis的關聯對映01MyBatis
- 關於 SAP Cloud Connector 500 failed to sign the Certificate 的錯誤訊息CloudAI
- Docker介紹下載安裝、製作映象及容器、做目錄對映、做埠對映Docker
- 淺談訊息佇列及常見的訊息中介軟體佇列
- 雜湊對映用法及演算法例題演算法
- 為什麼OilStates案對於開源界是個好訊息
- 多重對映
- Spring Data JPA 之 一對一,一對多,多對多 關係對映Spring
- 關於QQ可以發訊息但是網頁刷不出來問題網頁
- 關於 RocketMQ ClientID 相同引發的訊息堆積的問題MQclient
- 關於 SAP AMDP 呼叫錯誤訊息 client-specific and restricts access to a clientclientREST
- JavaEE MyBatis關聯對映之多對多(教材學習筆記)JavaMyBatis筆記
- 如何應對 RocketMQ 訊息堆積MQ
- .NET對接極光訊息推送
- 訊息對話方塊 confirm() prompt()
- CRM和ERP的Sales Organization的對映關係