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

解决方案 »

  1.   

    谢谢分享经验,见识了。好奇的驱使使我翻了一下相关资料,发现一点东西,不敢独享,也与大家分享备忘。
    似乎在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,以上其他坐标被遮挡会不会使相应的事件失效,有兴趣的同学不妨试一下