如何吃掉父窗体的消息???(100分)

  • 主题发起人 主题发起人 LWWVB
  • 开始时间 开始时间
L

LWWVB

Unregistered / Unconfirmed
GUEST, unregistred user!
我编写从TPanel继承下来的自定义控件,当用户在控件外点击,或按Tab,shift+tab或关闭窗体时,如果满足一定的条件,就和正常的控件一样.

如果发生某问题时,当用户在控件外点击,或按Tab,shift+tab或关闭窗体时,控件就要吃掉这个消息,使关闭窗体无效,点击也无效(不管左或右击,其它的控件也不能收到点击事件),焦点不能跳到其它控件上. 总言而之,就好象用户没有动作过一样.
 
应该不能的。

VCL对象用于接受消息的方法叫做MainWndProc()。通过MainWndPorc()可以对消息进行任何
的处理。不过,一般情况下很少直接调用MainWndProc()来处理消息,除非不想让消息通过
VCL的消息系统分发。
从MainWndProc()反回后,消息被传递给对象的WndProc()的方法,这就是该对象的窗体
过程,然后进入VCL的分发机构。分发机构使用Disptch()方法把消息分发给一个消息句柄。
消息到达该消息的处理句柄(Handler)后,经过该句柄的处理,这个消息处理过程就结束
了。
事件消息--MainWndProc---WndProc----Dispatch----Handle
//====================
所以当消息传到你的panel上时都已经走到了最后一步,消息已经分发出去了,已经逆转不了了。
除非你wm_getmessage hook,或者在程序开始的时候就写入过滤函数等非常规方法才可以
,不知道对不对。
 
一对亲父子,
儿子想让他父亲一辈都不生孩子
可能吗?

你要子窗体吃掉父窗体的消息,可是子窗体的消息哪来的呢
皮之不存,毛将焉附?
 
直接在父窗体中处理这些消息不可以嘛。
 
就像一楼说的,先拦截消息
 
baiduan说的不错,你可以通过MainWndPorc()处理你想要的消息,把剩下的消息会送给主窗口
 
算了.
不在控件写,在窗体写也可以.但是:
当用户在控件外点击,或按Tab,shift+tab或关闭窗体时,控件就要吃掉这个消息,使关闭窗体无效,点击也无效(不管左或右击,其它的控件也不能收到点击事件),焦点不能跳到其它控件上. 总言而之,就好象用户没有动作过一样.

在窗体又如何写这个呢???
 
可以定义钩子函数截获系统键盘信息,判断Tab,shift+tab或关闭窗体,使之按照自己的想法运行
 
把函数放在DLL里试试
 
后退
顶部