当我的光标在窗口上时,我需要在我的标题少子窗口上显示一些形状(确切地说是5个矩形),并在光标离开窗口时擦除它们;即进入父窗口区域。
我通过NCHITTEST跟踪鼠标移动到子窗口,矩形弹出完美。但是当我的光标离开子窗口时,我不能让它们消失,它们只是保留在客户区,直到WM_PAINT被调用到窗口。
有人能告诉我如何实现这项功能吗?我需要使用NCHITTEST案例,因为我的其余功能取决于它。我曾尝试跟踪mouse_move和lbuttondown事件,但这些事件并未与nchittest一起被捕获。
答案 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