自定義訊息的響應和資源訊息的響應有很多類似之處;資源訊息的響應是以資源的id號作為標識的;自定義的訊息要自己宣告訊息id。
一. 定義:
第一步要宣告訊息:
#definewm_mymsgwm_user+200
第二步要在類宣告中宣告訊息對映:
declare_message_map()
第三步要在類宣告中定義訊息處理函式:
afx_msg lresult mymsghandler(wparam,lparam);
在.cpp中做的工作:
第四步要實現訊息對映:
begin_message_map()
on_message(wm_mymsg,onmymsghandler)
end_message_map()
第五步要實現訊息處理函式(當然可以不實現):
lresult cmainframe::onmymsghandler(wparam w,lparam l)
afxmessagebox("hello,world!");
return 0;
二. 使用
1. 如果該自定義訊息所在的類是有cwnd派生出來的,且在本類中呼叫,那麼我們可以呼叫cwnd::sendmessage()函式,具體定義為:
lresult sendmessage( uint message, wparam wparam = 0, lparam lparam = 0 );
此時我們只需要在引發訊息的地方新增如下**:
sendmessge(wm_mymsg,0,0);
如果我們想在不同的情況下傳送使用者訊息,我們只需要將sendmessage的後兩個引數wparam,lparam加以標識即可;在訊息處理函式,寫乙個if條件語句(或switch語句)就可以了;將不同情況下的使用者訊息區分開;
例如看下面的例子:
①加入訊息響應函式實現
在ccdlg類的實現檔案中加入訊息響應函式的實現部分,**如下:
void ccdlg::customize(wparam wparam, lparam lparam)
cstring strtittle;
strtittle.format("自定義訊息引數:x=%d,y=%d",wparam,lparam);
setwindowtext(strtittle);
此函式的作用是將滑鼠的位置資訊顯示在對話方塊的標題欄部分。
②.選單部分
在主框架的「幫助」主選單中加入「自定義訊息」子選單,其id設為id_customize,通過類嚮導響應該命令,函式名預設。其函式體如下:
void cmainframe::oncustomize()
// todo: add your command handler code here
point pos;
//將訊息引數定義為螢幕座標值
getcursorpos(&pos);
pdlg->sendmessage(wm_customize,(uint)pos.x,pos.y);//這裡就是將(uint)pos.x,pos.y(注:它們分別對應①中訊息響應函式的兩個引數wparam wparam和lparam lparam)兩個引數分別傳給訊息響應函式。
2. 如果不在本類中響應自定義訊息;那麼我們只能用win32 的api函式;例如,當自定義訊息在cmainframe中,而觸發訊息的地方不在cmainframe類中,那麼我們可以用如下語句:
::sendmessge(::afxgetmainwnd()->m_hwnd,wm_mymsg,0,0);
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...
MFC自定義訊息
訊息機制是windows的典型執行機制,在mfc中有很多的訊息如wm btn 等。但是在有些情況下我們需要自定義一些訊息去做一些我們需要的功能,mfc的嚮導不能幫助我們做到這一點,我們可以通過新增相應的 去完成這個功能。新增自定義訊息操作如下 1.建立mfc工程,如基於對話方塊的應用程式,test。...
MFC自定義訊息
訊息機制是windows的典型執行機制,在mfc中有很多的訊息如wm btn 等。但是在有些情況下我們需要自定義一些訊息去做一些我們需要的功能,mfc的嚮導不能幫助我們做到這一點,我們可以通過新增相應的 去完成這個功能。新增自定義訊息操作如下 1.建立mfc工程,如基於對話方塊的應用程式,test。...