我有一個超級標準的自定義Windows控件。我想我的自定義控件通知其父窗口的某些事件。這樣做的最佳做法是什麼?從定製控件通知父窗口的首選方式是什麼?
發送父窗口的窗口消息中的
WM_USER
或WM_APP
範圍。這是行不通的,因爲如果另一個子控件嘗試同樣的事情,這些值可能會相互衝突。發送父窗口
WM_NOTIFY
。這似乎是正確的做法,但由於我擴展了一個標準的Windows控件,我如何確保我使用的通知代碼不會與基類(現在或將來)發送的通知代碼相沖突?從
RegisterWindowMessage
向父窗口發送窗口消息。這應該足以避免無意的衝突,但Microsoft建議僅將它用於進程間消息。該控件是否爲應用程序提供了一種機制來指定用於通知的消息。這似乎是唯一可靠的方法,但它也有點像矯枉過正。 (或者,而不是指定窗口消息,我想,應用程序可以傳下一個函數指針。)
我見過a similar question,但唯一的答案有依賴於MFC,並不真的避免碰撞的地址。
其他人通常做什麼?他們是否使用前三種方法之一而不擔心?我希望我的控件適用於我的應用程序之外的更廣泛的消費,所以我也更喜歡使用標準的Win32。
編輯:試圖澄清我在找什麼。
你的意思是繼承?或者你在使用ATL嗎?你想轉發什麼類型的消息,爲什麼? – 2012-02-25 11:21:03
@MikeKwan:超類或子類,它並不重要。但爲了這個問題的目的,你可以假設我是超類(即註冊一個新的窗口類)。假設我使用的是純Win32,所以沒有C++或ATL/WTL。 – jamesdlin 2012-02-25 11:45:15
任何類庫通過將消息反射回原始控件來努力修復borken C消息傳遞模型。所以它可以通過特定於控件實例的消息處理程序進行處理。通過C++基類實現的常見行爲,通過允許客戶端代碼派生自定義行爲。沒有理由在這裏追求古老的方式,通過簡單地不發送消息給父母就可以更容易。並自動解決模糊問題。 – 2012-02-25 15:39:28