怪事,为何我的鼠标根本没动,却会触发mousemove事件呢?代码为证Option ExplicitPrivate Sub Form_Load()
    Me.WindowState = 2
End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Debug.Print "鼠标在移动!"
End Sub
新建一个窗体,然后拷上代码,试下看看,我的鼠标绝对没动,但是每次都会触发一次mousemove事件,这是为什么呢?

解决方案 »

  1.   

    你没动,不等于鼠标没动,桌子振动、病毒、电源,也可能触发MouseMove事件。
    有看见过鼠标指针自己跑吗,那时,你绝对没对鼠标。
      

  2.   


    你所说的移动指的是什么?程序第一次得到鼠标坐标时,因为与 0, 0 不同,会触发一次鼠标移动事件。以后,如果“绝对没动”,就不会再触发。看看坐标点就明白了。Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Debug.Print "鼠标在移动!" & X & "," & Y
    End Sub
      

  3.   


    对于系统来说,鼠标是否相对于窗体移动,有 2 个条件:1 鼠标坐标在窗体上。
    2 鼠标在窗体上的坐标发生了变化。当你 Me.WindowState = 2 时,这两点就会同时满足。
      

  4.   

    确实,我将鼠标放在离屏幕上方几毫米的地方,就不会触发mousemove事件了,
    但是放在两边,不管多靠边,也会触发这个事件,有点不解,是不是屏幕上方几mm处,不是客户区呢?
      

  5.   

    鼠标在移动!0 - 0
    鼠标在移动!0 - 0
    鼠标在移动!0 - 0
    鼠标在移动!0 - 0
    鼠标在移动!0 - 0
    --------------------
    可见,在0,0处,依然会触发,mousemove事件
      

  6.   

    Option ExplicitPrivate Sub Form_Load()
        Me.BorderStyle = 0
        Me.Caption = ""
        Me.WindowState = 2
    End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Debug.Print "鼠标在移动!" & X & " - " & Y
    End Sub
      

  7.   

    我测试的结果是:鼠标放在最上边的标题栏,用F5启动,不激发Form_MouseMove事件.
      

  8.   

    Me.WindowState = 2  '毛病在这一句,因使窗口最大化,就会触发Form_MouseMove事件使用timer控件解决,这样改即可
    Dim sFirst As Boolean
    Private Sub Form_Load()
        Me.BorderStyle = 0
        Me.Caption = ""
        sFirst = True
        Timer1.Interval = 2000
        Timer1.Enabled = True
        Me.WindowState = 2
    End Sub
    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If sFirst = True Then Exit Sub
        Debug.Print "鼠标在移动!" & X & " - " & Y
    End Sub
    Private Sub Timer1_Timer()
        sFirst = False
        Timer1.Enabled = False
    End Sub
      

  9.   

    LZ:你的问题在本坛和VBGOOD都发了.VBGOOD的贴已被版主关闭.
    我查了下MSDN:
    MouseMove 事件
    此事件在移动鼠标时发生。
    语法
    Private Sub Form_MouseMove(button As Integer, shift As Integer, x As Single, y As Single)
    Private Sub MDIForm_MouseMove(button As Integer, shift As Integer, x As Single, y As Single)
    Private Sub object_MouseMove([index As Integer,] button As Integer, shift As Integer, x As Single, y As Single)
    MouseMove 事件语法包含下列部分:
    部分 描述 
    object 一个对象表达式,其值是“应用于”列表中的一个对象。 
    index 一个整数,用来唯一地标识一个在控件数组中的控件。 
    button 一个整数,它对应鼠标各个按钮的状态,如果某个按钮按下,其中就有一个二进制位被设置。button 参数是具有相应于左按钮(位 0),右按钮(位 1),以及中间按钮(位 2)的一个位字段。这些位的值分别等于 1,2,和 4。它指示这些鼠标按钮的整体状态;三个二进制位中的一些、全部、或一个也没有被设置,指示这些按钮中的一些、全部、或一个也没有被按下。 
    shift 一个整数,该整数相应于 SHIFT,CTRL,和 ALT 键的状态。某键被按下使得一个二进制位被设置。shift 参数是具有相应于 SHIFT 键(位 0),CTRL 键(位 1),以及 ALT 键(位 2)最少二进制位的一个位字段。这些位的值分别等于 1,2,和 4。shift 参数指示这些键的状态。这些位中可能有一些、全部、或者一个也没有被设置,指示这些键中的一些、全部、或者一个也没有被按下。例如,CTRL 和 ALT 键都被按下,则 shift 的值就是 6。 
    x, y 一个指定鼠标指针当前位置的数。x 和 y 的值所表示的总是通过该对象 ScaleHeight, ScaleWidth, ScaleLeft,和 ScaleTop 属性所建立的坐标系统的方式。 
    说明
    MouseMove 事件伴随鼠标指针在对象间移动时连续不断地产生。除非有另一个对象捕获了鼠标,否则,当鼠标位置在对象的边界范围内时该对象就能接收 MouseMove 事件。
    要测试 button 或 shift 参数,可使用对象浏览器中的 Visual Basic (VB) 对象库中所列出的常数,用来定义该参数中的各个位: 
    常数(按钮) 值 描述 
    vbLeftButton 1 左按钮按下。 
    vbRightButton 2 右按钮按下。 
    vbMiddleButton 4 中间按钮按下。 常数(换挡) 值 描述 
    vbShiftMask 1 SHIFT 键按下。 
    vbCtrlMask 2 CTRL 键按下。 
    vbAltMask 4 ALT 键按下。 
    然后这些常数用作位屏蔽,对于按钮的各种组合,无须计算出各个组合的唯一的位字段值即可进行检测。
    要测试某一条件,首先将各个结果赋给一个临时整型变量然后再与一个位屏蔽的 button 或 shift 参数进行比较。测试应当用各个参数进行 And 运算,若结果大于零,则说明该键或按钮被按下。其操作如下:
    LeftDown = (Button And vbLeftButton) > 0
    CtrlDown = (Shift And vbCtrlMask) > 0
    然后,接下去可对结果的各种组合进行检测,其操作如下:
    If LeftDown And CtrlDown Then
    注意 为了对鼠标按钮按下和释放所引起的事件进行处理,可使用 MouseDown 和 MouseUp 事件过程。
    MouseMove 事件的 button 参数与 MouseDown 和 MouseUp 事件的 button 参数是不同的。对于 MouseMove 事件来说,button 参数指示的是所有按钮当前的状态;一个 MouseMove 事件可指示某些、全部或没有一个按钮被按下。对于 MouseDown 和 MouseUp 事件来说,button 参数在每个事件精确地指示一个按钮。
    在 MouseMove 事件中任何时侯移动窗口,都能引起层叠事件。当该窗口移动到指针下面时 MouseMove 事件将产生。即使是鼠标完全不动 MouseMove 事件也能产生。
    注意上述红色文字的描述.
      

  10.   

     谢谢,asftrhgjhkjlkttttttt
    你说到了问题的本质,谢谢。
      

  11.   

    科学:只有相对静止,没有绝对静止。
    vb:获得新焦点触发mousemove 缺省值0,0