《一》訊息的分類
1標準訊息
除wm_command
之外,所有以
wm_開頭的訊息。例如wm_char wm_create訊息。
從cwnd
派生的類,都可以接收到這類訊息。cwnd是從ccmdtarget派生而來的,所以cwnd也可以接受命令訊息,也可以接受通告訊息。
n2命令訊息
來自選單、加速鍵或工具欄按鈕的訊息。這類訊息都以
wm_command
呈現。在
mfc中,通過選單項的標識(
id)來區分不同的命令訊息;在
sdk中,通過訊息的
wparam
引數識別。
從ccmdtarget
派生的類,都可以接收到這類訊息。
n3通告訊息
由控制項產生的訊息,例如,按鈕的單擊,列表框的選擇等均產生此類訊息,為的是
向其父視窗(通常是對話方塊)通知事件的發生。這類訊息也是以
wm_command
形式呈現。
從ccmdtarget
派生的類,都可以接收到這類訊息。
在mfc應用程式中傳輸的訊息有三種型別:視窗訊息、命令訊息和控制項通知。
(1)視窗訊息:wm_***
視窗訊息(window message)一般與視窗的內部運作有關,如:建立視窗、繪製視窗和銷毀視窗等。通常,訊息是從系統傳送到視窗,或從視窗傳送到視窗。
(2)命令訊息:wm_command
命令訊息一般與處理使用者請求相關,當使用者單擊乙個選單項或工具欄時,命令訊息產生,並被傳送到能處理該請求的類物件(如:裝載檔案、編輯文字和儲存選項等)。
(3)控制項通知:有多種格式
通常,控制項通知在某些重要事件發生時,由控制項視窗傳送到父視窗,如開啟乙個組合框。控制項通知為父視窗進一步控制子視窗提供了機會。例如,開啟乙個組合框時,父視窗可以用組合框初建時得不到的訊息填充它。
bn_***x是cbutton產生的訊息,en_***x是cedit產生的訊息,等等。
mfc 訊息型別:
按照訊息的範圍來分,可以分成四大類訊息:
1) 系統訊息 (0 到wm_user–1)
4) 應用程式之間自定義訊息 (0xc000 到0xffff)
其中系統訊息有可以分成三類: 視窗訊息(wm_), 命令訊息(wm_command), 控制項通知訊息(wm_notify)。
不同的訊息使用不同的對映巨集:
型別訊息
對映巨集對映函式型別
系統訊息
視窗訊息wm_
on_wm_
不同的訊息有不同的對映函式。
命令訊息wm_command
on_command/
on_command_range
void on*** ()/
void on*** (uint id)
on_update_command_ui/ on_update_command_ui_range
void o***x(ccmdui* pcmdui)
on_control/
on_control_range
void on*** ()/
void on*** (uint id)
on_control_reflect
void on*** ()
通知訊息wm_notify
on_notify
afx_msg void memberfxn ( nmhdr * pnotifystruct, lresult* result );
on_notify_reflect
afx_msg void memberfxn ( nmhdr * pnotifystruct, lresult* result );
程式內部自定義訊息
程式內部#define 的訊息
on_message
on_thread_message
lresult on*** (wparam wparam, lparam lparam)
程式之間訊息
registerwindowmessage得到的訊息
on_registered_message
on_registered_thread_message
lresult on*** (wparam wparam, lparam lparam)
說明:1)on_command 是響應選單欄,狀態列,工具欄傳送給框架視窗的命令訊息的巨集。命令型別是:cn_command
2)on_update_command_ui 是響應程式空閒時促發的介面更新訊息的巨集。
3)on_control 是父視窗響應控制項傳送的通知訊息的巨集。
4)on_control_reflect 是子控制項響應父視窗反射回來的通知訊息的的巨集。
5)on_notify 是父視窗響應複雜控制項傳送的通知訊息的巨集
6)on_notify_reflect 是複雜子控制項響應父視窗反射回來的通知訊息的的巨集。
7)on_message 是視窗響應自定義的訊息的巨集
8)on_thread_message是執行緒響應自定義的訊息的巨集
9)on_registered_message 是響應通過registerwindowmessage註冊得到的訊息巨集。
簡單的控制項都是通過wm_command傳送通知訊息給父視窗。例如:
static,edit,richedit,animation,button,listbox,combobox。
static
(stn_開頭)
stn_clicked: ( on_stn_clicked / on_control(stn_clicked,) )
stn_dblclk: ( on_ stn_dblclk / on_control(stn_dblclk,) )
stn_enable:
stn_disable:
edit
(en_開頭)
en_setfocus
en_killfocus
en_change
en_update
button
(bn_開頭)
bn_clicked
listbox
(lbn_開頭)
lbn_selchange
lbn_setfocus
combo box
(cbn_開頭)
cbn_selchange
cbn_dropdown
cbn_closeup
cbn_selendcancel
cbn_selendok
對於複雜控制項,通過wm_notify來父視窗。例如:
listview, tree view.
list view
(lvn_開頭)
lvn_columnclick
tree view
(tvn_開頭)
tvn_selchanged
MFC視窗訊息
mfc應用程式中處理訊息的順序 1.afxwndproc 該函式負責接收訊息,找到訊息所屬的cwnd物件,然後呼叫afxcallwndproc 2.afxcallwndproc 該函式負責儲存訊息 儲存的內容主要是訊息識別符號和訊息引數 用程式以後使用,然後呼叫windowproc 函式 3.win...
mfc 訊息傳遞
訊息分類 windows的訊息都是以wm 為名,wm 的意思是 windows message mfc把訊息分為三大類 命令訊息 wm command 命令訊息意味著 使用者命令程式做某些操作 凡是ui物件產生的訊息都是這種命令訊息,可能來自選單或加速鍵或工具欄按鈕,並且都以wm command呈現...
MFC訊息迴圈
mfc應用程式中處理訊息的順序 1.afxwndproc 該函式負責接收訊息,找到訊息所屬的cwnd物件,然後呼叫afxcallwndproc。2.afxcallwndproc 該函式負責儲存訊息 儲存的內容主要是訊息識別符號和訊息引數 用程式以後使用,然後呼叫windowproc 函式。3.win...