事件结构-----鼠标消息的次序,消息链的终止和转发

2015-08-26 10:11:29来源: eefocus
对于前面板和前面板上的控件,如果鼠标左键点击面板上的一个控件,控件肯定会发生mouse down事件,那么由于控件是位于面板上的,面板是否会发生mouse down事件那?如果发生mouse down事件,那么这个两个事件的先后次序如何?根据WINDOWS窗口过程处理来看,任何消息应该是主窗口先得到所有消息,然后派发到它上面的各个控件.LABVIEW是否也是这样处理的那?做个实验看一下.



看得出,面板先产生mouse down 然后图片控件才产生mouse down事件,验证上面的设想.

有的鼠标事件是连续发生的,比如mouse move事件,那mouse down ,mouse up,mouse enter,mouse leave是否是连续发生的事件吗?比如我的鼠标一直按下,那mouse down不断地发生吗?因为连续发生的事件极大地占用了系统资源,所以编程时要尽量避免.

大家看测试程序


测试结果:


 


可以得出结论:除了mouse move是连续产生事件之外,其它的都不是连续发生了.

下面的问题是:

既然任何针对控件的消息都是通过PANEL接收并转发的,那么我们能否截取这个消息,中断消息的传送或者重定向,比如本来是按钮A产生事件,我们人为地使按钮B产生事件那,我们研究一下.(VC中称为钩子)


仔细看上图,事件有的是有?有的没有,有?的表示该事件可以进行相应处理,来决定消息是否继续或者如何继续.

还是用上面的例子,我们先来添加PANEL的mouse down事件,并禁止它继续传送,那么PICTURE BOX还能产生响应鼠标按下的

事件吗?


从上图可以清楚地看到,当鼠标点击picture box时候,产生的是pane的mouse down?事件,无论是是pane还是上面的控件包括STOP按钮都不再产生mouse down 事件,同时,其它的鼠标事件 mouse enter ,mouse leave都不受影响.


 

红色箭头处,我们给定常量TRUE,表示后面将忽略这个mouse down消息.

这样我们就做到了截取并终止消息的传送.

这个方法有很重要的用途,比如我们在测试或者控制中,禁止操作者用鼠标对画面进行操作,有三种方式

用API函数全面禁止,包括其他程序,隐藏或这发灰需要禁止的按钮(如果多了,就不现实了),而在程序自身禁止是比较合适的.上面的例子就全面禁止了对鼠标按下的响应,解决了这个问题.

能否重定向消息那,右面只有四个可用的选择:

DISARD:TRUE-->中断消息传送,FALSE-->继续.其它三个都是和键有关的,所以没有好的办法.

有一个折中的办法:对于每一个控件都有两个属性value 和value(signal),这两个属性的区别是当给Value(signal)一个值时,将产生value change事件,没有办法直接其它消息的重定向.





关键字:事件结构  鼠标消息  消息链

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/Test_and_measurement/2015/0826/article_12940.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
事件结构
鼠标消息
消息链

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved