delphi – 如何拦截发送到我表单上的任何TWinControl的消息?
我面临着一个艰巨的任务,即只要将其发送到表单上的任何TWinControl,就必须拦截和处理
WM_GETOBJECT 消息.
>每个小组 显然,我不希望单独对每个控件进行子类化: >它很难正确完成(当人们想要开始子类化时可能会使用SetWindowSubclass,而当他们完成时会使用RemoveWindowSubclass,并且没有意识到他们刚刚介绍的崩溃) 有没有办法参与处理使用SendMessage直接发送到子控件的每个消息 >类似于TApplicationEvents.OnMessage如何拦截每个发布的消息 解决方法
如果您不想为每个单独的控件创建子类(这当然是一个选项,例如可以使用内插器类进行简化),那么您可以通过Win32 API
SetWindowsHookEx() 使用特定于线程的
WH_CALLWNDPROC 或
WH_CALLWNDPROCRET 钩子.功能.钩子将告诉您哪个HWND正在接收每个消息,并且在与钩子相同的进程中挂钩线程时,您不需要在DLL中实现钩子.
如果您需要给定HWND的TWinControl *指针,则可以在Vcl.Controls单元中使用VCL的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |