在學習首先弄清楚兩點:(1)誰要傳送這個訊息(2)誰要接受這個訊息。
用乙個簡單的例子來說明。物件a向b(也可以就是a到a)傳送訊息。
1 傳送訊息
首先在a的標頭檔案中定義這個訊息:
#define wm_usermessage wm_user+30
所有自定義訊息都是以wm_user訊息為基礎加上乙個任意的自然數來表示的。a是向外傳送訊息的物件,因此在a的某個方法(函式)裡就會呼叫用來發訊息的函式b::sendmessage()/b::postmessage(),因為是b接受訊息,因此是如上的形式。
2 接受訊息
物件接受乙個訊息,應該有三部分:在標頭檔案中有該訊息的處理函式的原型;在實現檔案中有接受訊息對映的巨集; 以及該訊息的處理函式的具體實現。
2.1 標頭檔案中加上自定義訊息的處理函式原型
在declare_message_map()語句之前,一對afx_msg之間加上如下形式的函式原型:
afx_msg lresult onprocname( wparam wparam, lparam lparam );
對win32來說,wparam, lparam是傳遞訊息最常用的手段。
2.2 在實現檔案中加上接受訊息對映的巨集
在cpp檔案裡,begin_message_map語句之後,在一對afx_msg_map之間,增加 如下形式的**:
on_message(wm_usermessage, onprocname)
上面是不用分號結尾的。
2.3 在實現檔案中給出訊息處理函式的具體實現。
vc++中自定義訊息四步走完
開始用到自定義訊息,找了半個小時,總結如下:
1、首先在使用者類中宣告自定義訊息wm_showtask(當然可以為其他):
#define wm_showtask wm_user + 101
2、然後在類成員宣告中宣告訊息處理函式
afx_msg void mymessageproc();
3、在類實現檔案中新增訊息對映巨集
on_message(wm_mymessage,mymessageproc);
(如果使用者需要乙個整個系統唯一的訊息,可以呼叫 sdk 函式 registerwindowmessage 並使用 on_register_message 巨集指令取代 on_message 巨集指令,其餘步驟同上。)
4、在類實現檔案中新增訊息處理函式
lresult cmydlg::mymessageproc()
VC 6 0中如何傳送自定義訊息
1.postmessage和sendmessage函式的區別 使用者可以通過postmessage和sendmessage函式來傳送自定義訊息,其區別在於 postmessage只把訊息放入佇列,不管訊息處理程式是否處理都返回,然後繼續執行,這是個非同步訊息投放函式 sendmessage必須等待訊...
VC新增自定義訊息
在vc 中想加入自定義訊息,以下方法可供參考 1 首先定義訊息 cpp view plain copy print?define wm mymessage wm user 100 define wm mymessage wm user 100 2 在.h標頭檔案中,加入訊息響應函式 cpp view...
MFC新增使用者自定義訊息
1 傳送訊息 首先在a的標頭檔案中定義這個訊息 define wm usermessage wm user 100所有自定義訊息都是以wm user訊息為基礎加上乙個任意的自然數來表示的。2 接受訊息 物件接受乙個訊息,應該有三部分 在標頭檔案中有該訊息的處理函式的原型 在實現檔案中有接受訊息對映的...