0x00 windows應用程式都是訊息驅動,其中mfc,其介面操作或者執行緒間通訊是通過處理訊息實現相應的操作,如使用者在操作視窗時會產生訊息,將其送給視窗的訊息處理函式,對使用者的操作做出對應的響應。
0x01 訊息
mfc的視窗訊息含三個部分:
1_訊息值(乙個無符號整數,經常被定義為巨集)
2_訊息附帶的wparam型別的引數
3_訊息附帶的lparam型別的引數
windows訊息種類
1_標準windows訊息,均是以wm_開頭的訊息,需要注意的是wm_command不屬於該型別。
2_命令訊息,訊息名為wm_command,訊息中附帶識別符號id來區分是來自哪個選單、工具欄按鈕或加速鍵的訊息。
3_通知訊息,通知訊息一般由列表框等子視窗傳送給父視窗,訊息名也是wm_command,其中附帶了控制項通知碼來區分控制項。
0x02 訊息對映機制
乙個訊息與訊息處理函式一一對應的訊息對映表,以及訊息處理函式的生命和實現等**。具體來講,當視窗接收到訊息時,會到訊息對映表中查詢該訊息對應的訊息處理函式,然後又訊息處理函式進行對應的處理。
0x03訊息對映表
在begin_message_map()和end_message_map()之間的內容成為訊息對映入口項。除了在含cmainframe的實現檔案中新增訊息對映表外,在類的定義檔案mainfrm.h中會新增declare_message_map(),其一般來說會寫在類定義的結尾位置。
!!!0x04訊息處理函式的新增
1_在類定義中加入訊息處理函式的宣告,注意要以afx_msg打頭。 | /*在mainfrm.**件中新增 wm_create訊息處理函式的宣告*/
| afx_msg int oncreate(lpcreatestruct ipcreatestruct);
2_在類的訊息對映表中新增該訊息的訊息對映入口。 | /*wm_create的訊息對映入口*/
| on_wm_create();
3_在類的實現中新增訊息處理函式的函式實現。 | /*在mainfrm.cpp中新增wm_create的訊息處理函式的實現*/
| int cmainframe::oncreate(lpcreatestruct lpcreatestruct)
MFC學習筆記 訊息對映機制afx
前面已經說過,windows應用程式是訊息驅動的。在mfc軟體開發中,介面操作或者執行緒之間通訊都會經常用到訊息,通過對訊息的處理實現相應的操作。比較典型的過程是,使用者操作視窗,然後有訊息產生,送給視窗的訊息處理函式處理,對使用者的操作做出響應。視窗訊息一般由三個部分組成 1.乙個無符號整數,是訊...
MFC訊息對映機制
一 mfc中採用的這種訊息處理機制成為 mfc訊息對映機制 乙個mfc訊息響應函式在程式中有三處相關資訊 函式原型,函式實現,關聯訊息和訊息響應函式的巨集。函式原型 標頭檔案cdrawview 兩個afx msg注釋巨集之間 訊息響應函式原型的宣告 afx msg void onlbuttondow...
MFC訊息對映機制
win32的訊息迴圈機制是 產生的訊息交由作業系統,將其放到應用程式的訊息佇列中。應用程式通過getmessage函式從這個佇列中取出 一條訊息 由dispatchmessage函式把訊息又交給作業系統,作業系統呼叫視窗過程函式wndproc進行處理。該函式利用switch case結構來判斷並響應...