3

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

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

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

4

1 回答 1

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
于 2012-04-25T08:25:59.980 回答