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

时间:2011-12-14 20:10:33

标签: delphi winapi tframe window-messages

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

1 个答案:

答案 0 :(得分:7)

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

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

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