LVN_GETDISPINFO receiver -- list control 的parent 是否必须为它?

LVN_GETDISPINFO receiver -- whether the list control's parent must be as it?

在WinAPI中,有ListView控件。当它不保存任何数据时,可以调整此控件以在所谓的虚拟模式下工作。相反,它从其父 window 查询此数据。至少,相应地documentation.

我目前正在处理一个由 MFC 驱动的旧项目。我遇到了一件奇怪的事情:主题中指定的通知处理程序放在 CListCtrl 后继 class 中。也就是说,列表控件将通知发送给自己。这行得通。不过,从技术角度来看,这并不奇怪。可能...但是,另一方面,为什么文档中提到父 window 作为通知接收者?

我的问题:架构上LVN_GETDISPINFO的处理程序放在列表控件class而不是父级中是否是正确的想法window class 如文档所述?与记录的解决方案相比,此解决方案是否有一些优势?

MFC 有 message reflection technique. (The same thing is available 到 ATL/WTL)。通知消息仍然到达父级,但父级将它们反映到控件,改变消息代码。

当您使用一个控件而不覆盖它的行为并且不对其进行子类化时,父 window 对其行为负责,就像您使用通用控件一样。

当您对控件进行子类化以定义更具体的行为时,最好在子类化的控件中定义消息处理,以防止在控件与其父控件之间传播。


VCL,Delphi 和 C++Builder 中可用的 UI 框架,做同样的事情。它将父 window 的通知消息反映到子控件,将它们转换为子控件 类 中的事件。事件由控件激发,控件始终由框架子类化,并且通知消息始终按照内部反映的方式进行处理。