這是從新對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_msg
void
onresponse(
int
num);
我們一般將自定義的訊息解除安裝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)定義響應函式
void
cmy41dlg::onresponse(
int
num)
(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本身搶占 的訊息值,在想新增...