由於mfc中無法通過類嚮導來自定義訊息,所以需要手動新增,主要過程如下:
本文基於vs2008下通過執行緒實現資料實時更新的對話方塊運用程式
1. 定義訊息(resource.**件中):
由於很多新控制項也會用到wm_user訊息,所以定義wm_user+100或更高,避免衝突
#define wm_updatedata (wm_user + 100)
2015-3-18 更新
1. 定義訊息( stdafx.**件中):
由於很多新控制項也會用到wm_user訊息,所以定義wm_user+100或更高,避免衝突,訊息定義到stdafx.**件中,resource.**件由系統維護,經常出現自定義的訊息丟失。
#define wm_updatedata (wm_user + 100)
2. 宣告訊息響應函式:
放在訊息對映部分,即declare_message_map()之前
// 實現
protected:
hicon m_hicon;
// 生成的訊息對映函式
virtual bool oninitdialog();
afx_msg void onpaint();
afx_msg hcursor onquerydragicon();
afx_msg lresult onupdatedata(wparam wparam, lparam lparam);
declare_message_map()
3. 實現訊息響應函式:
由於在vs2008中未定義on_message_void,所以定義的訊息響應函式必須有返回值,即lresult;而訊息引數是wparam wparam和lparam lparam
lresult cedittestdlg::onupdatedata(wparam wparam, lparam lparam)
4. 將訊息對映到訊息處理函式:
放在afx_msg_map之前,把wm_updatedata訊息對映到訊息響應函式onupdatedata
begin_message_map(cedittestdlg, cdialog)
on_wm_paint()
on_wm_querydragicon()
on_message(wm_updatedata, onupdatedata)
//}}afx_msg_map
on_bn_clicked(idc_button1, &cedittestdlg::onbnclickedbutton1)
end_message_map()
5. 傳送自定義訊息:
以下函式是在乙個新的執行緒中呼叫的,postmessage,sendmessage,sendmessagetimeout均可用,推薦使用sendmessagetimeout函式
static uint sendmsgthread(lpvoid lpparam)
return 0;
}
如果使用者需要乙個定義整個系統唯一的訊息,可以呼叫sdk函式registerwindowmessage定義訊息:
在resource.h中將**
#define wm_updatedata (wm_user + 100)
修改為
static uint wm_updatedata=registerwindowmessage(_t("user"));
並使用on_registered_message巨集指令取代on_message巨集指令,其餘步驟同上。
注:如果仍然使用on_message巨集指令,compile可以通過,但是無法響應訊息。
MFC新增使用者自定義訊息
1 傳送訊息 首先在a的標頭檔案中定義這個訊息 define wm usermessage wm user 100所有自定義訊息都是以wm user訊息為基礎加上乙個任意的自然數來表示的。2 接受訊息 物件接受乙個訊息,應該有三部分 在標頭檔案中有該訊息的處理函式的原型 在實現檔案中有接受訊息對映的...
MFC 新增自定義訊息對映
定義個訊息巨集 當需要自定義多個訊息巨集時,後面加的數遞增就行了 define wm mymsg wm user 100 宣告事件處理函式 注意返回值型別必須為lresult 前面的afx msg不用管直接寫上就可以了,函式名自定義,引數根據自己需求,如 wparam 10,lparam buff ...
MFC自定義訊息
訊息機制是windows的典型執行機制,在mfc中有很多的訊息如wm btn 等。但是在有些情況下我們需要自定義一些訊息去做一些我們需要的功能,mfc的嚮導不能幫助我們做到這一點,我們可以通過新增相應的 去完成這個功能。新增自定義訊息操作如下 1.建立mfc工程,如基於對話方塊的應用程式,test。...