VC中自定義訊息的使用

2021-07-09 06:20:12 字數 2451 閱讀 6512

這是從新對windows的自定義訊息響應函式進行整理。因為我發現自定義訊息響應函式還是非常有用的,尤其是在windows多程式設計中,用的類越多,有時候就比較有用。

windows訊息用"wm_"這個字首,自定義的訊息一般用"um_這個字首"。

//1.建立響應函式的原型:

在vs2005中,對於響應函式有了個比較嚴格的規定,導致以前vc6裡面有很多不能直接使用,原型如下:

cpp** 

afx_msg lresult (cwnd::)myfnx(wparam wparam,lparam lparam)  

對於返回型別與引數都不能少。將響應函式新增在標頭檔案當中:

cpp** 

......     

// 生成的訊息對映函式     

protected:     

......     

afx_msg lresult myfnx(wparam wparam, lparam lparam);     

......     

declare_message_map()     

......    

2.定義訊息:

在類的標頭檔案中新增乙個自定義的訊息:

cpp** 

#define um_mymsg wm_user+1  

這樣um_mymsg就是對應的訊息。

3.將訊息對映到響應函式:

在類的原始檔中新增對映關係:

cpp** 

.......     

begin_message_map(cmainframe, cframewnd)     

......     

on_message(um_mymsg,myfnx)     

......     

end_message_map()     

......   

4.響應函式的具體實現:

在原始檔中新增上成員函式myfnx的具體實現:

cpp** 

lresult cwnd::myfnx(wparam wparam, lparam lparam)     

5.在需要使用到該函式的地方發出訊息

cpp**

postmessage(my_msg,wparam,lparam);     

//將訊息加入等待佇列,不會馬上執行     

//sendmessage(my_msg,wparam,lparam)則不同,會馬上執行 

下面我們舉乙個實際的例子來說明該段過程.例如在對話方塊中設定乙個按鈕,每隔3秒鐘會自動的彈出message對話方塊:

(1)首先在標頭檔案或cpp檔案中定義乙個訊息

#define click_message_box  wm_user+100

(2)然後在訊息對映巨集裡面新增函式宣告:

1

2

3

4

5

6

7

8

9

10

//}afx_msg

declare_message_map()

afx_msgvoidonresponse(intnum);

我們一般將自定義的訊息解除安裝afx_msg的外面

1

2

3

4

5

6

7

8

9

10

11

12

begin_message_map(cmy41dlg, cdialog)

//}afx_msg_map

end_message_map()

(4)定義響應函式

voidcmy41dlg::onresponse(intnum)

(5)傳送訊息:

postmessage(click_message_box,1);

需要注意的是,postmessage函式後面帶有引數,可以向響應函式裡面傳參,例如上面的例子中,我們在(5)的訊息函式中有乙個int num,其實就是postmessage函式傳過來的引數1。 

vc 使用自定義訊息

問題提出 在程式中,要完成自己獨特的任務,必須自己來定義訊息.如何做呢?解決方法 1 定義自己的訊息,要從wm user開始.define wm my message wm user 10 2 定義自己的訊息對映關係.begin message map cmainframe,cframewnd on...

VC自定義訊息

示例 主對話方塊a edit控制項 副對話方塊b edit控制項 將b中edit內容在其銷毀後,顯示在a中edit中 1 自定義訊息 define wm mymsg wm user 100 2 b cpp afxgetmainwnd sendmessage wm mymsg,wparam 0,lpa...

VC中自定義訊息實現

在vc專案開發中,很多時候需要自己定義訊息進行事務處理。上次也剛好有同學問及,這裡綜合網路上的一些資料,集中起來供參考。u 自定義訊息 我們可以通過一下兩種方法來自定義乙個訊息 1 方法一 step 1 使用wm taskbarcreated來確定乙個沒有被windows本身搶占 的訊息值,在想新增...