先看乙個
目的: a可能希望接收b,c,d,d1等各個控制項的訊息。
情況:目前b為一自定義控制項,且在b.h向外提供一通知訊息wm_b_notify(wm_user+101)。
但是a也想要接收c,d的通知訊息,那麼你可能想要setbwndnotify,setcnotify。
但是你需要注意不能使你自定義的訊息id和wm_user+101相同。這樣你可能去b.h裡面找那個wm_b_notify定義的值,倘若控制項繁多,你就難以完成這一任務了。
解決:b和其他控制項要保持一致性。
note1: 不主動向外提供訊息。
當前視窗類的.h檔案不要定義向外部通知的訊息。
note2: 向外部僅提供乙個介面,外部告訴自己訊息傳送的目的地。
外部告訴控制項訊息通知的目的地。
示例:加入d控制項和d1控制項都定義在d.h檔案中,我們的d1控制項會向d通知訊息wm_d1_notify,並且d也會向外通知訊息wm_d_notify,那麼d必須提供乙個介面給使用d類的物件(假設a類)呼叫,這樣d的訊息就通過該介面向外傳送。
a.h裡面有:
dm_d;
a.cpp裡面有:
#define user_message_base(wm_user + 500)
#define um_d_notify(user_message_base + 1)
on_message(um_d_notify, ondnotify)
m_d.setnotifywindow(getsafehwn(), um_d_notify);
a::ondnotify()
{}千萬不要在d.h定義d的通知訊息,像下面這種用法不可取。
如:在d.h裡面有wm_d_notify
在d.cpp裡面有getparent()->postmessage(wm_d_notify, wparam, lparam);
在a.cpp裡面直接
on_message(wm_d_notify, ondnotify)
a::ondnotify()
下面是講解:
VC 如何處理自定義訊息
在sdk程式設計中,對訊息的獲取與分發是通過訊息迴圈來完成。而在mfc程式設計中則是通過採取訊息對映的方式對其進行處理。相比而言,這樣的處理方式要簡單得多,這也是符合物件導向程式設計中盡可能隱含實現細節的原則。乙個完整mfc訊息對映包括對訊息處理函式的原型宣告 實現以及存在於訊息對映中的訊息入口。一...
VC 如何處理自定義訊息
classwizard不允許增加使用者自定義訊息,所以你必須手工輸入。輸入後,classwizard就可以象處理其它訊息一樣處理你自定義的訊息了。下面是增加自定義訊息的步驟 第二步 實現訊息處理函式。該函式使用wpram和lparam引數並返回lpesult。lpesult cmainframe o...
MFC中如何處理自定義訊息
假設自定義訊息號是wm test,訊息處理函式是ontest,處理該訊息的對話方塊指標是m ptestdlg,則進行自定義訊息處理的步驟主要有以下 1 定義訊息號,建議在stdafx.h中進行定義 define wm test wm user 1 自定義訊息 2 在響應該訊息的對話方塊標頭檔案中找到...