2

WM_NOTIFY 消息通常用于就地“工具提示”(消息气球)和其他控件通知,但如果我将控件放在 TFrame 上,则这些控件永远不会出现 WM_NOTIFY 消息。为什么这些消息不再发送到我的表单,我该怎么办?

4

1 回答 1

7

WM_NOTIFY被发送到控件的父窗口。这意味着TFrame,而不是它自己的父级TForm(或另一个父级)将接收其直接子控件的消息。

你不应该WM_NOTIFY直接处理。子类化子控件本身,例如通过为其分配一个新的WindowProc处理程序,然后CN_NOTIFY改为处理消息。VCL 将接收原始WM_NOTIFY消息并自动将其作为CN_NOTIFY消息转发给它所属的特定控件。

这同样适用于WM_COMMAND(forwarded as CN_COMMAND) 和许多其他转发的系统消息。Controls.pas 单元定义了CN_...为转发的系统消息定义的所有可用消息。

于 2011-12-14T21:36:50.300 回答