2017-05-19 8 views
2

迷惑な問題が発生しました。マウスポインタがメインウィンドウ上にあり、所有ポップアップウィンドウが表示されている(下の例を参照)か、または非表示になっていると、マウスが移動されていなくても毎回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以降に変更された場合、我々はテストすることができ(メイン)ウィンドウプロシージャで。位置が変更されていない場合は、ポップアップウィンドウの表示/非表示またはウィンドウキャプチャの解放が必要なためです。

+2

無効にすることはできません。実際に重要なのは、カーソルの形状が正しいことを保証します。あなたはそれを回避する必要があります。 –

+0

この動作はどこかに記載されていますか? – bkausbk

+1

[なぜ偽の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

答えて

0

ここに提供された情報(@IInspectableありがとう)に基づいて、私の一般的な解決策は、GetMouseMovePointsExでマウスの位置履歴を調べることで、特定のポイントが本当のポイントであるかどうかを検出することです。ポイントが見つからない場合は、有効な移動が発生しなかったことを意味します。

POINT CurrentPoint{GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)}; 
    MapWindowPoints(hWnd, nullptr, &CurrentPoint, 1); 
    MOUSEMOVEPOINT mmpi = { 
     CurrentPoint.x, CurrentPoint.y, GetTickCount(), 0 
    }; 
    MOUSEMOVEPOINT mmpo = {0}; 
    if (GetMouseMovePointsEx(sizeof(mmpi), &mmpi, &mmpo, 1, GMMP_USE_DISPLAY_POINTS) > 0) { 
     MyInstance->HandleMouseMove(POINT{GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)}, wParam); 
    } else { 
     // No mouse point found in history, so couldn't be a valid point 
    } 
関連する問題