当我的光标不在窗口上时,我需要在没有字幕的子窗口上显示一些形状(准确地说是5个矩形),并在光标离开窗口时删除它们;即进入父窗口区域。
我正在通过NCHITTEST跟踪鼠标在子窗口中的移动,并且矩形会完美弹出。但是,当光标离开子窗口时,我无法让它们消失,它们只保留在客户区中,直到在窗口上调用WM_PAINT为止。
谁能告诉我如何实现此功能?我需要使用NCHITTEST案例,因为我的其余功能取决于它。我曾尝试跟踪mouse_move和lbuttondown事件,但这些事件并未与nchittest一起捕获。
最佳答案
查看 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
关于winapi - 如果光标位于子窗口上,则在Win32子窗口上显示矩形;如果光标离开子窗口,则将其删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10311795/