mfc中的訊息型別:
普通資訊:也就是以wm_開頭,除了wm_command以外的訊息,這類訊息在wm_user以下的是系統訊息,wm_user以上的可以由 使用者自己定義
命令訊息:就是wm_command,也就是一些選單、工具欄中的訊息,包括快捷鍵
,這類訊息處理的機制與其他以wm_開頭的訊息處理 機制不同,它具有一條層次明確的訊息流動路徑
1.如果乙個類要響應訊息,應該具備什麼條件?
答:能夠響應訊息的類必須都從ccmdtarget類中派生,因為只有以這個類中提供了訊息的框架和處理機制。
如果該類要求響應普通的windows訊息
,那就要求自定義的類必須從cwnd中派生。
如果該類要求響
應命令訊息
,那麼自定義的類可以從ccmdtarget中派生
2.普通資訊的處理機制是怎樣的?
答:訊息發出者直接發給對應cwnd的窗體控制代碼,由cwnd負責訊息的響應。
所以這類訊息必須同乙個cwnd類對應,更精確的說必須與乙個hwnd型別的窗體控制代碼相對應。
cwnd類或其子類沒有呼叫cwnd::create或cwnd::createex函式時,cwnd類不對應任何窗體,訊息處理不能正常運作。
3.如何自定義mfc訊息?
答:在.h中做的工作:
第一步要宣告訊息:
#define wm_mymsg wm_user+8
第二步要在類宣告中宣告訊息對映:
declare_message_map()
第三步要在類宣告中定義訊息處理函式:
afx_msg lresult mymsghandler(wparam,lparam);
在.cpp中做的工作:
第四步要實現訊息對映:
begin_message_map(cmainframe, cmdiframewnd)
on_message(wm_mymsg,onmymsghandler)
end_message_map()
第五步要實現訊息處理函式(當然可以不實現):
lresult cmainframe::onmymsghandler(wparam w,lparam l)
在引發或發出訊息的地方只用寫上:
::sendmessge(::afxgetmainwnd()->m_hwnd,wm_mymsg,0,0);
4.以上是繼承自cwnd類的自定義訊息處理,如何自定義乙個由cobject類派生的類來處理訊息呢?
答:乙個重要的結論,在自定義類能夠處理任何訊息之前一定要確保m_hwnd關聯到乙個窗體,即便這個窗體是不可見的。
在自定義類的建構函式中呼叫create函式,當然也可以在別處呼叫,只要確保在訊息傳送之前。
create的呼叫,要注意兩個地方,第乙個引數是類的名稱,最好設為null,
第五個引數是父窗體物件的指標,這個函式指定的物件一定要存在,最好為整個程式的主窗體。
程式例項:
cmytestobject::cmytestobject()
//一定要在生成主窗體後使用,在主窗體完成oncreate訊息的處理後
cmytestobject::cmytestobject(cwnd *pparent)
不能如下呼叫create,因為此時cmytestobject不關聯任何窗體,所以this中的m_hwnd無效:
cwnd::create(null,"mytestobject",ws_child,crect(0,0,0,0),this,1234);
對映自定義訊息函式:
begin_message_map(cmytestobject, cwnd)
on_message(wm_mymsg,onmymsghandler)
end_message_map()
lresult cmytestobject::onmymsghandler(wparam w,lparam l)
在類外部發出訊息:
cmytestobject *test=new cmytestobject();
::sendmessage(test->m_hwnd,wm_mymsg,0,0);
在類內部某個成員函式(方法)中發出訊息:
::sendmessage(m_hwnd,wm_mymsg,0,0);
最後乙個問題便是容易產生警告錯誤的窗體**,自定義的類要顯式呼叫窗體銷毀,析構函式如下:
cmytestobject::~cmytestobject()
MFC自定義訊息
訊息機制是windows的典型執行機制,在mfc中有很多的訊息如wm btn 等。但是在有些情況下我們需要自定義一些訊息去做一些我們需要的功能,mfc的嚮導不能幫助我們做到這一點,我們可以通過新增相應的 去完成這個功能。新增自定義訊息操作如下 1.建立mfc工程,如基於對話方塊的應用程式,test。...
MFC自定義訊息
訊息機制是windows的典型執行機制,在mfc中有很多的訊息如wm btn 等。但是在有些情況下我們需要自定義一些訊息去做一些我們需要的功能,mfc的嚮導不能幫助我們做到這一點,我們可以通過新增相應的 去完成這個功能。新增自定義訊息操作如下 1.建立mfc工程,如基於對話方塊的應用程式,test。...
MFC自定義訊息
訊息機制是windows的典型執行機制,在mfc中有很多的訊息如wm btn 等。但是在有些情況下我們需要自定義一些訊息去做一些我們需要的功能,mfc的嚮導不能幫助我們做到這一點,我們可以通過新增相應的 去完成這個功能。新增自定義訊息操作如下 1.建立mfc工程,如基於對話方塊的應用程式,test。...