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

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手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
事件结构
鼠标消息
消息链

小广播

独家专题更多

迎接创新的黄金时代 无创想,不奇迹
迎接创新的黄金时代 无创想,不奇迹
​TE工程师帮助将不可能变成可能,通过技术突破,使世界更加清洁、安全和美好。
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved