winapi - 如果光标位于子窗口上,则在Win32子窗口上显示矩形;如果光标离开子窗口,则将其删除

标签 winapi childwindow

当我的光标不在窗口上时,我需要在没有字幕的子窗口上显示一些形状(准确地说是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/

相关文章:

winapi - 如何在管道上使用 WriteFile 修复乱码?

c++ - 在 Windows 控制台中获取按键

从子窗口绑定(bind) wpf

c++ - MFC:如何使子对话框的默认按钮起作用?

silverlight - 如何从 ViewModel 中关闭 Silverlight 子项?

winapi - 错误 RC2104 : undefined keyword or key name: WS_EX_LAYOUTRTL

c++ - 如何以编程方式配置鼠标增强指针精度

c++ - 剪贴板数据上使用的 GlobalSize 函数导致错误

javascript - window.close 不适用于 IE

c# - Silverlight ChildWindow 在回调时未正确关闭