小弟有个问题想请教大虾

时间:2022-09-07 23:02:42
小弟用BEGIN_MESSAGE_MAP的方法捕获了WM_LBUTTONDOWN
的消息。可是为什么FORM里的BUTTON的CLICK事件还能响应呢。
我本意是屏蔽WM_LBUTTONDOWN.运行结果好象FORM的CLICK事件
是不响应了。可是BUTTON1还挺正常。难道没捕获么?
如果要捕获FORM里的BUTTON的WM_LBUTTONDOWN事件该如何办呢。
请教各位大虾了。

13 个解决方案

#1


消息映射我没有用过
一般我重载wndproc
在wndproc里若是要屏蔽哪个消息
需要把消息返回true,表示已经处理
或许你是这方面的原因

#2


你要重定义Click事件

#3


消息映射的代码你是如何写的?

#4


关注

#5


呵呵,Button是一个独立的WinControl,它有自已的消息循环,所以你那样只能屏蔽FORM的消息,而对BUTTON没有影响。

#6


to rh:
你说的重载WNDPROC也只能屏蔽FORM的啊。不能屏蔽BUTTON的。。。
to songhtao:
你说的重定义CLICK该如何定义呢。
to Wingsun:
就用BEGIN_MESSAGE_MAP啊。
在头文件中:
。。
void  __fastcall OnMyMessage(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_LBUTTONDOWN,TMessage,OnMyMessage)
END_MESSAGE_MAP(TForm))
。。
to Raptor(猛禽):
对。我的理解每个CONTROL都有自立独立的消息处理循环。所以FORM的MOUSEMOVE
不能触发BUTTON的MOUSEMOVE事件。可是我们知道SDK中消息都由WNDPROC这个东西来
处理。所以我的理解一定是在哪个地方比如CASE一下分掉了。是FORM的MOUSE就找
FORM的DISPATCH。是BUTTON的MOUSE就找BUTTON的DISPATCH。不知我的理解对吗。

可是如果我想屏蔽BUTTON的事件呢。。。。? 
小弟不是钻牛角尖。实在是想搞懂问题。谢谢大虾多多指点。呵呵

#7


关注

#8


在你自己的事件处理器OnMyMessage中屏蔽掉Dispatch(&Message);
这样被你截获的消息自不会继续传递到相应的FORM,OK?

#9


接管BUTTON事件
BUTTON1->ONCLICK=MYONCLICK
MYONCLICK什么都不卓就是了

#10


关注

#11


是啊!!关键是你自己的的OnMyMessage函数是怎么写的??

#12


Raptor(猛禽)说的很对吧。。可是为什么会这样呢。。
消息过滤是在哪个地方呢。

#13


有截取从TControl继承下来元件的消息,必须继承该元件来完成,然后可以使用消息映射或wndproc都可以

#1


消息映射我没有用过
一般我重载wndproc
在wndproc里若是要屏蔽哪个消息
需要把消息返回true,表示已经处理
或许你是这方面的原因

#2


你要重定义Click事件

#3


消息映射的代码你是如何写的?

#4


关注

#5


呵呵,Button是一个独立的WinControl,它有自已的消息循环,所以你那样只能屏蔽FORM的消息,而对BUTTON没有影响。

#6


to rh:
你说的重载WNDPROC也只能屏蔽FORM的啊。不能屏蔽BUTTON的。。。
to songhtao:
你说的重定义CLICK该如何定义呢。
to Wingsun:
就用BEGIN_MESSAGE_MAP啊。
在头文件中:
。。
void  __fastcall OnMyMessage(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_LBUTTONDOWN,TMessage,OnMyMessage)
END_MESSAGE_MAP(TForm))
。。
to Raptor(猛禽):
对。我的理解每个CONTROL都有自立独立的消息处理循环。所以FORM的MOUSEMOVE
不能触发BUTTON的MOUSEMOVE事件。可是我们知道SDK中消息都由WNDPROC这个东西来
处理。所以我的理解一定是在哪个地方比如CASE一下分掉了。是FORM的MOUSE就找
FORM的DISPATCH。是BUTTON的MOUSE就找BUTTON的DISPATCH。不知我的理解对吗。

可是如果我想屏蔽BUTTON的事件呢。。。。? 
小弟不是钻牛角尖。实在是想搞懂问题。谢谢大虾多多指点。呵呵

#7


关注

#8


在你自己的事件处理器OnMyMessage中屏蔽掉Dispatch(&Message);
这样被你截获的消息自不会继续传递到相应的FORM,OK?

#9


接管BUTTON事件
BUTTON1->ONCLICK=MYONCLICK
MYONCLICK什么都不卓就是了

#10


关注

#11


是啊!!关键是你自己的的OnMyMessage函数是怎么写的??

#12


Raptor(猛禽)说的很对吧。。可是为什么会这样呢。。
消息过滤是在哪个地方呢。

#13


有截取从TControl继承下来元件的消息,必须继承该元件来完成,然后可以使用消息映射或wndproc都可以