为什么表单不接收 TFrame 子级的WM_NOTIFY消息?



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

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

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

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

最新更新