今天偶而翻看以前的程序,想给其中一个增加个托盘功能以便更加人性化,托盘化以前是做过的,这次居然鼓捣半天未果,纠结于托盘后鼠标单击无法弹出窗体,而把相关代码复制到新建工程中运行却没有任何问题,这可真是够诡异,查看其他子类化模块和鼠标事件后确定均跟此怪事无关,于是开始研究为何没能触发Form_MouseMove事件,后才发现原因并得以解决。
原来这个托盘的Form_MouseMove事件有一个不大不小的bug(姑且算),就是鼠标移入托盘图标后的鼠标在form中的坐标恒定为
7680,0,所以问题就来了 如果窗体上的这个位置被任意控件遮挡则将无法触发Form_MouseMove事件,而我的程序里这个位置确实是被按钮挡住了,所以无法响应鼠标事件,调整按钮位置空出7680,0这个点后运行恢复正常。应该还有人被这个bug困扰过,记录下来备忘。
原来这个托盘的Form_MouseMove事件有一个不大不小的bug(姑且算),就是鼠标移入托盘图标后的鼠标在form中的坐标恒定为
7680,0,所以问题就来了 如果窗体上的这个位置被任意控件遮挡则将无法触发Form_MouseMove事件,而我的程序里这个位置确实是被按钮挡住了,所以无法响应鼠标事件,调整按钮位置空出7680,0这个点后运行恢复正常。应该还有人被这个bug困扰过,记录下来备忘。
似乎在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,以上其他坐标被遮挡会不会使相应的事件失效,有兴趣的同学不妨试一下