经验共享:关于诡异的托盘鼠标事件
今天偶而翻看以前的程序,想给其中一个增加个托盘功能以便更加人性化,托盘化以前是做过的,这次居然鼓捣半天未果,纠结于托盘后鼠标单击无法弹出窗体,而把相关代码复制到新建工程中运行却没有任何问题,这可真是够诡异,查看其他子类化模块和鼠标事件后确定均跟此怪事无关,于是开始研究为何没能触发Form_MouseMove事件,后才发现原因并得以解决。原来这个托盘的Form_MouseMove事件有一个不大不小的bug(姑且算),就是鼠标移入托盘图标后的鼠标在form中的坐标恒定为
7680,0,所以问题就来了 如果窗体上的这个位置被任意控件遮挡则将无法触发Form_MouseMove事件,而我的程序里这个位置确实是被按钮挡住了,所以无法响应鼠标事件,调整按钮位置空出7680,0这个点后运行恢复正常。
应该还有人被这个bug困扰过,记录下来备忘。 --------------------编程问答-------------------- 感谢分享…… --------------------编程问答-------------------- 记住了,3Q。 --------------------编程问答-------------------- 哈哈,真是够诡异的!!感谢分享!! --------------------编程问答-------------------- 这个我以前也碰到过。后来也是调试鼠标位置发现的。 --------------------编程问答-------------------- 谢谢分享经验,见识了。
好奇的驱使使我翻了一下相关资料,发现一点东西,不敢独享,也与大家分享备忘。
似乎在Form上发生以下几种事件时,鼠标的坐标X值都为恒定的值且都不相同。
MouseMove:7680
Left MouseDown:7695
Left MouseUp:7710
Left DoubleClick:7725
Right MouseDown:7740
Right MouseUp:7755
Right DoubleClick:7770
可以参考一下这个源码
http://www.vbaccelerator.com/home/vb/utilities/Goldfish/Goldfish_Source_Code_zip_fSysTray_frm.asp
它是Select Case鼠标的X值来RaiseEvent的。
没试过除了7680,以上其他坐标被遮挡会不会使相应的事件失效,有兴趣的同学不妨试一下 --------------------编程问答--------------------
学习了! --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答--------------------
补充:VB , API