在WinAPI中,有一個ListView控制元件。這個控制元件可以被調整為在所謂的虛擬模式下作業,當它不持有任何資料時。相反,它從它的父視窗查詢這些資料。至少,根據檔案。
。我目前正在處理一個由 MFC 驅動的舊專案。我面臨著一個奇怪的事情:主題中指定的通知的處理程式被放置在CListCtrl繼承類中。也就是說,串列控制元件將通知發送給了它自己。而這是有效的。雖然,從技術角度看,這里沒有什么值得驚訝的。也許吧... 但是,另一方面,為什么檔案中提到父視窗是通知接收者?
我的問題是:將 uj5u.com熱心網友回復: MFC有message reflection技術。(ATL/WTL也有可用)。通知訊息仍然到達父類,但是父類將它們反映到控制元件中,改變了訊息代碼。
當您使用一個控制元件而不重寫其行為且不對其進行子類化時,父視窗將對其行為負責,因為您使用的是通用控制元件。
當您對控制元件進行子類化以定義更具體的行為時,那么在子類化的控制元件中定義訊息處理可能會更好,以防止這種情況在控制元件和其父視窗之間蔓延。
標籤:LVN_GETDISPINFO的處理程式放在串列控制類中,而不是檔案中所說的父視窗類中,這在架構上是否正確?這個方案比檔案中的方案有什么優勢嗎?
VCL,即 Delphi 和 C Builder 中可用的 UI 框架,也做了同樣的事情。它將通知訊息從父視窗反映給子控制元件,并將其轉化為子控制元件類中的事件。事件由控制元件觸發,控制元件總是被框架子類化,而通知訊息總是被作為內部反射處理。
