2009-08-14 6 views
5

마우스의 왼쪽 버튼이 현재 눌려져 있거나 (뭔가 첫 번째 가능성이 있다고 생각하는) 드래그하고 있는지 어떻게 확인합니까?Mouse LButton이 다운되어 있는지 확인하십시오.

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) 호출은 왼쪽 또는 오른쪽 논리 마우스 버튼에 매핑되는지 여부에 관계없이 항상 왼쪽 마우스 버튼의 상태를 반환합니다. 마우스 버튼이 교체 된 경우 TRUE을 반환하는 GetSystemMetrics(SM_SWAPBUTTON)을 호출하여 시스템의 현재 마우스 마우스 버튼과 논리 마우스 버튼의 매핑을 확인할 수 있습니다.

결과 유형은 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); 
} 
관련 문제