none
有个小问题,就是Winform中的鼠标移动事件 RRS feed

  • 问题

  • 就是Winform中的鼠标移动事件,为何在不进行任何操作,也不移动鼠标的情况之下,怎么还是会不停的触发鼠标移动事件呢?是微软工程师脑子进水了,还是由于其他什么原因,必须要这样呢?
    2017年8月21日 9:30

答案

  • 更改窗口的z次序的时候会触发这个消息。比如你弹个对话框出来,Windows会发个WM_MOUSEMOVE,因为说不定你的对话框有改光标的代码。还有就是SetRedraw也会触发这个消息,因为Windows不确定你解冻窗口之后是否需要更新光标。

    那么问题来了,是谁在不停地更改窗口的z次序或者调用SetRedraw?你应该从这方面找。

    假如你的系统上有应用程序甲和乙都认为自己有必要覆盖掉其他窗口,那么结果是这两个程序会不停地互相覆盖。Vista之前连任务管理器都可以随便盖……要是你控制不了用户的计算机上装什么程序,还是老实检查鼠标位置吧,鼠标位置没变就啥也不做(除非你有定时改光标的爱好)。



    Visual C++ MVP

    2017年8月22日 15:55
    版主

全部回复

  • 可否贴出部分代码供分析情景,或是反编译下winform窗体鼠标移动事件的源代码以探明究竟

    我认为主要点还是对win32消息处理的理解,winform只是一层封装。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年8月22日 0:28
  • Hi,

    根据我的测试,我是没有遇到你说的问题,你能提供一份可以重现问题的代码到one drive吗?

    我建议你换一个鼠标,再来测试一下,也许是鼠标出现问题了。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年8月22日 2:43
    版主
  • 更改窗口的z次序的时候会触发这个消息。比如你弹个对话框出来,Windows会发个WM_MOUSEMOVE,因为说不定你的对话框有改光标的代码。还有就是SetRedraw也会触发这个消息,因为Windows不确定你解冻窗口之后是否需要更新光标。

    那么问题来了,是谁在不停地更改窗口的z次序或者调用SetRedraw?你应该从这方面找。

    假如你的系统上有应用程序甲和乙都认为自己有必要覆盖掉其他窗口,那么结果是这两个程序会不停地互相覆盖。Vista之前连任务管理器都可以随便盖……要是你控制不了用户的计算机上装什么程序,还是老实检查鼠标位置吧,鼠标位置没变就啥也不做(除非你有定时改光标的爱好)。



    Visual C++ MVP

    2017年8月22日 15:55
    版主