MFC 訊息型別

2021-07-12 06:15:19 字數 3760 閱讀 1345

《一》訊息的分類

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...