迷惑な問題が発生しました。マウスポインタがメインウィンドウ上にあり、所有ポップアップウィンドウが表示されている(下の例を参照)か、または非表示になっていると、マウスが移動されていなくても毎回WM_MOUSEMOVE
メッセージが生成されます。いくつかの理由から、私の場合はそれを許容することはできません。ポップアップウィンドウを表示/非表示にした後の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
以降に変更された場合、我々はテストすることができ(メイン)ウィンドウプロシージャで。位置が変更されていない場合は、ポップアップウィンドウの表示/非表示またはウィンドウキャプチャの解放が必要なためです。
無効にすることはできません。実際に重要なのは、カーソルの形状が正しいことを保証します。あなたはそれを回避する必要があります。 –
この動作はどこかに記載されていますか? – bkausbk
[なぜ偽のWM_MOUSEMOVEメッセージが表示されるのですか?](https://blogs.msdn.microsoft.com/oldnewthing/20031001-00/?p=42343)、[疑いなく、私は偽のWM_MOUSEMOVEメッセージを受け取ることができますが、なぜ(https://blogs.msdn.microsoft.com/oldnewthing/20090617-00/?p=17863)、[リソースマネージャが実行されているときに、なぜ偽のWM_MOUSEMOVEメッセージが表示されるのですか?](https: //blogs.msdn.microsoft.com/oldnewthing/20160616-00/?p=93685)。 – IInspectable