2009-08-14 28 views
5

マウスの左ボタンが現在押し下げられているかどうかを確認するにはどうしたらいいですか?マウスボタンが押されていないか確認してください。

私はMouse.IsDragingを試みましたが、結果はありませんでした。

注:自分のアプリケーションでマウスメッセージを処理するので、WMの場合は問題を解決できます。

+0

の可能性のある重複した[デルファイ:?任意のマウスボタンが押されている場合はどのように確認することができます - マウスイベントの外側を](http://stackoverflow.com/questions/25681543/delphi-how-can-i -check-if-any-mouse-buttons-are-a-mouse-ev) – Johan

答えて

20

Windows API関数GetAsyncKeyState()がありますが、その名前にもかかわらずマウスボタンの状態を取得できます。リンクされたドキュメントには、質問への回答が直接含まれています。

GetAsyncKeyStateは、マウスボタンで機能します。ただし、物理的なボタンが割り当てられている論理的なマウスボタンではなく、物理的なマウスボタンの状態をチェックします。たとえば、GetAsyncKeyState(VK_LBUTTON)コールは、左または右の論理マウスボタンにマッピングされているかどうかにかかわらず、左の物理マウスボタンの状態を常に返します。マウスボタンがスワップされている場合、GetSystemMetrics(SM_SWAPBUTTON)を呼び出してTRUEを返すことによって、システムの現在の物理マウスボタンの論理的なマウスボタンへのマッピングを判断できます。

結果の型がshortで、最上位ビットが値が負であるかどうかを調べるだけです。

+0

非常に良い。最重要ビットをチェックする方法については解説していますが、それを取得する正式な方法を説明できますか? – Vassilis

+0

@ VassilisGr:申し訳ありませんが、私はこの要求を本当に理解していません。コンパイラに型強制を残すことは、32ビット対64ビットコンパイルのような問題からあなたを隔離するので、おそらく最良の(つまり正式な)ことです。あるいは、結果の中のその単一のビットがセットされているかどうかをテストする方法を意味しますか? '(結果$ 8000)<> 0'のようなものを使ってください。 – mghie

+0

は '(結果$ 8000)<> 0'を探していました。ありがとう! – Vassilis

0
OnMouseMove(UINT nFlags, CPoint point) 
{ 
    m_LButtonPressed=nFlags & MK_LBUTTON; 
    CWnd::OnMouseMove(nFlags, point); 
} 
関連する問題