手動新增訊息響應

2021-04-19 07:12:17 字數 1356 閱讀 4926

windows系統中的程式大部分都是通過訊息和事件驅動的。在windows下的應用程式主要工作是進行訊息的迴圈處理,通過迴圈等待訊息的到來和事件 的發生,然後對不同的訊息和事件執行相關的**,完成相應的操作。windows提供了大量的訊息,主要包括3種型別:標準訊息、通知訊息和命令訊息。當 然也可以根據使用者的需要自定義一些訊息。這些訊息在mfc中有統一的處理框架,即訊息對映機制。訊息對映機制將訊息及其處理函式表示成一一對應的表,並對 這張表進行分析處理。

總的來說,mfc訊息對映機制的具體實現方法是:在每個能接收和處理訊息的類中,定義乙個訊息和訊息函式靜態對照 表,即訊息對映表。在訊息對映表中,訊息與對應的訊息處理函式指標是成對出現的。某個類能處理的所有訊息及其對應的訊息處理函式的位址都列在這個類所對應 的靜態表中。當有訊息需要處理時,程式只要搜尋該訊息靜態表,檢視表中是否含有該訊息,就可以知道該類能否處理此訊息。如果能處理該訊息,則同樣依照靜態 錶能很容易找到並呼叫對應的訊息處理函式。

無論時利用mfc嚮導還是手動新增訊息處理時,都需要在原始檔中增加三處**:

1、在類的定義中新增訊息處理成員函式的函式宣告。

2、在類的訊息對映表中加入相應的訊息對映表項。

3、在類的實現中加入該訊息處理成員函式的函式實現。

如果時自定義訊息,則還需要在標頭檔案中定義自定義訊息的巨集。

例如:要在abc類中新增個自定義訊息um_aaa的處理,當訊息產生的時候,響應onaaa( )函式。可以按照下面四個步驟來實現:

1、在標頭檔案abc.h中定義自定義訊息的巨集。

#define um_aaa  wm_user+1

在windows系統中提供了大量的訊息的同時可以給使用者自定義訊息提供了空間,我們在自定義訊息的巨集的時,只有選擇wm_user以上的數值就不會與系統提供的訊息衝突了。

2、在標頭檔案abc.h中宣告訊息響應函式的onaaa( )。

protected:

//}afx_msg

declare_message_map( )

訊息響應函式應該放在declare_message_map( )之前,afx_msg注釋巨集之間。該函式宣告前不有乙個afx_msg限定符,這也是乙個巨集,這個巨集表面這個函式是乙個訊息響應函式的宣告。

3、進行訊息對映

beigin_message_map(abc)

//}afx_msg_map

end_message_map( )

在end_message_map( )之前的afx_msg_map注釋巨集之間用on_message( )將um_aaa和onaaa響應函式相關聯起來。

4、在abc.cpp中將訊息響應函式的實現

void  onaaa( )

只有按照上面的4個步驟,就可以根據自己的需要,在系統程式中新增合適的訊息和響應函式了。

VC 中新增訊息響應函式

我們舉乙個實際的例子來說明該段過程.例如在對話方塊中設定乙個按鈕,每隔3秒鐘會自動的彈出message對話方塊 1 首先在標頭檔案或cpp檔案中定義乙個訊息 define click message box wm user 100 2 然後在訊息對映巨集裡面新增函式宣告 afx msg declar...

VC 中新增響應自定義訊息

define wm debug wm user 1 2.在視窗標頭檔案中新增 比如mainframe.h class cmainframe public cframewnd afx msg afx msg lresult ondebug wparam wparam,lparam lparam 3.在...

C 訊息響應

在mfc中,訊息響應使用的是一種訊息對映的機制,而在c 中也有一套完整的機制,下面介紹c 中訊息處理的兩種方法 在c 中進行訊息響應有兩種方法,一種是在系統預定義的代表中新增新的事件,一種是過載視窗基類中的預定義訊息響應函式。在c 中預定義了很多的訊息響應的代表,比如 宣告乙個代表型別 public...