在mfc中想要完成訊息對映,需要在begin_message_map和end_message_map兩個巨集之間進行訊息對映宣告才行, 例如:
//開始訊息對映的定義(必須用在類實現中)
begin_message_map(cmyclass, cbase)
...on_control_reflect(cbn_dropdown, &cmyclass::oncbndropdown)
on_wm_mousemove()
...//結束訊息對映的定義(必須用在類實現中)
end_message_map()
常見訊息對映格式
現在對常見的訊息對映格式和宣告進行總結如下:
標準訊息
標準訊息開頭是以wm_開始的, 形如wm_close,對這種訊息其格式如下,是否有形參和具體訊息有關係。
對映格式:
on_wm_close()
函式宣告:
afx_msg void onclose()
命令訊息
命令訊息是通過wm_command 形式進行傳遞的,它可以響應選單命令,工具欄命令,按鈕命令等。
訊息對映:
on_command(id, memberfxn)
函式宣告:
afx_msg void memberfxn()
通告訊息
通告訊息一般是使用者點選控制項,控制項向父視窗(對話方塊)發出對應的事件訊息,比如cbn_dropdown、bn_clicked等;通告訊息都具有相同的函式宣告,僅訊息對映有所區別,下面列舉出不同控制項的訊息對映。
各控制項的函式宣告:
afx_msg void memberfxn( )
各控制項的訊息對映:
on_control( ,, )
on_bn_paint(, )
on_bn_clicked(, )
on_bn_disable(, )
on_bn_hilite(, )
on_bn_unhilite(, )
on_bn_doubleclicked(,)
on_en_change(, )
on_en_errspace(, )
on_en_hscroll(, )
on_en_killfocus(,)
on_en_maxtext(, )
on_en_setfocus(, )
on_en_update(, )
on_en_vscroll(, )
on_cbn_closeup(, )
on_cbn_dblclk(, )
on_cbn_dropdown(, )
on_cbn_editchange(, )
on_cbn_editupdate(, )
on_cbn_errspace(, )
on_cbn_killfocus(, )
on_cbn_selchange(, )
on_cbn_selendcancel(,)
on_cbn_selendok(, )
on_cbn_setfocus(, )
on_lbn_dblclk(, )
on_lbn_errspace(, )
on_lbn_killfocus(, )
on_lbn_selchange(, )
on_lbn_setfocus(, )
狀態更新訊息
狀態更新訊息主要應用更新選單項和工具欄按鈕,其訊息對映和函式宣告如下:
訊息對映:
on_update_command_ui(id, memberfxn)
函式宣告:
afx_msg void memberfxn(ccmdui *pcmdui);
自定義訊息
mfc提供了自定義訊息的函式對映介面,便於使用者定義自己的訊息,其函式對映入口和函式宣告如下:
訊息對映:
on_message(message, memberfxn)
函式宣告:
afx_msg lresult memberfxn(wparam, lparam);
訊息反射
訊息反射是指父視窗在收到控制項訊息(通告訊息,標準訊息)後,再傳遞給子控制項本身來處理,父視窗不處理,其格式如下:
對於wm_command 形式的:
//訊息對映:
on_control_reflect( wnotifycode, memberfxn )
//函式宣告:
afx_msg void memberfxn ( );
對於wm_notify形式的:
//訊息對映:
on_notify_reflect(wnotifycode, memberfxn)
//函式宣告:
afx_msg void memberfxn (nmhdr * pnotifystruct, lresult* result);
更多資訊見windows控制項訊息反射
vs2008新增訊息對映的方法
訊息對映 學習總結
訊息對映和命令傳遞是緊密相連的兩部分。就像執行時型別識別和動態建立,後者都要在前者搭建的框架上執行。在訊息對映和命令傳遞中,訊息對映表的建立是基礎,命令的傳遞路線是核心,讓我跟隨書中的足跡,記下自己學習中的心得。訊息對映 的關鍵,是建立起一張訊息攀爬的線路網,即訊息對映表 message map 以...
從MFC訊息對映巨集分析MFC訊息對映的實現
在mfc中,我們可以找到如下三個巨集 declare massage map begine massage map class,bassclass end massage map 下面來分析這三個巨集 1 declare message map 作用 為乙個訊息響應類宣告必需的成員變數和成員函式。d...
MFC 訊息對映的實現
訊息對映的實現 windows訊息概述 windows應用程式的輸入由windows系統以訊息的形式傳送給應用程式的視窗。這些視窗通過視窗過程來接收和處理訊息,然後把控制返還給windows。訊息的分類 佇列訊息和非佇列訊息 從訊息的傳送途徑上看,訊息分兩種 佇列訊息和非佇列訊息。佇列訊息送到系統訊...