【发布时间】:2017-10-19 11:28:18
【问题描述】:
我遇到了一个烦人的问题。当鼠标指针位于我的主窗口上并显示拥有的弹出窗口(参见下面的示例)或使其不可见时,即使鼠标没有移动,每次都会生成 WM_MOUSEMOVE 消息。由于几个原因,在我的情况下它不能被容忍。
hWnd = CreateWindowEx(0, wcx.lpszClassName, L"Demo", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, nullptr, 0, hInstance, nullptr);
HWND hWndPopupTest = CreateWindowEx(WS_EX_NOACTIVATE | WS_EX_TOPMOST, L"Static", L"DemoPopup", WS_POPUP | WS_VISIBLE, 10, 10, 100, 100, hWnd, 0, hInstance, nullptr);
ShowWindow(hWnd, SW_SHOW);
ShowWindow(hWndPopup, SW_SHOWNOACTIVATE);
Sleep(1000);
ShowWindow(hWndPopup, SW_HIDE);
调用ReleaseCapture 时会发生相同的行为。这是可以禁用的功能吗?这是一个已知的“问题”还是有解决方法?
编辑:肮脏的解决方法
在(主)窗口过程中,我们可以测试鼠标位置自上次WM_MOUSEMOVE 以来是否发生了变化。如果位置没有改变,那一定是因为显示/隐藏了弹出窗口或释放了某个窗口捕获。
【问题讨论】:
-
无法禁用。实际上很重要,它确保光标形状正确。你必须解决它。
-
这种行为是否记录在某处?
标签: winapi mouseevent popupwindow user32 hwnd