如果光标在其上,则在win32子窗口上显示矩形,如果光标离开子窗口则擦除

时间:2012-04-25 08:12:06

标签: winapi childwindow

当我的光标在窗口上时,我需要在我的标题少子窗口上显示一些形状(确切地说是5个矩形),并在光标离开窗口时擦除它们;即进入父窗口区域。

我通过NCHITTEST跟踪鼠标移动到子窗口,矩形弹出完美。但是当我的光标离开子窗口时,我不能让它们消失,它们只是保留在客户区,直到WM_PAINT被调用到窗口。

有人能告诉我如何实现这项功能吗?我需要使用NCHITTEST案例,因为我的其余功能取决于它。我曾尝试跟踪mouse_move和lbuttondown事件,但这些事件并未与nchittest一起被捕获。

1 个答案:

答案 0 :(得分:1)

查看TrackMouseEvent()函数。

当鼠标进入窗口时需要调用它(WM_MOUSEMOVE如果它还没有被跟踪),并且当鼠标离开时会通知你的窗口(WM_MOUSELEAVE)。

这是一些示例VB6代码,但应该可以轻松转换为任何其他语言。

Select Case Msg
    Case WM_MOUSEMOVE
      If Not MouseInWindow Then
        Dim ET As TRACKMOUSEEVENTTYPE
        'Set up the mouse leave notification
        ET.cbSize = Len(ET)
        ET.hwndTrack = Me.hWnd
        ET.dwFlags = TME_HOVER Or TME_LEAVE
        ET.dwHoverTime = 0
        TrackMouseEvent ET

        MouseInWindow = True
        'The mouse has just entered
        Redraw
      End If

    Case WM_MOUSELEAVE
      If MouseInWindow Then
        MouseInWindow = False
        'The mouse has just left
        Redraw
      End If
End Select