2013-01-23 1 views
0

내 프로젝트에 COleControl 개체가 있습니다. 이 COleControl 안에는 CRectTracker 개체가 있습니다.처리되지 않은 LButtonUp Windows 메시지 COleControl

WM_LButtonUp의 windows 메시지 (이벤트)를 처리하고 싶습니다. (사용자가 마우스 왼쪽 버튼을 누르기를 멈 추면). 내 .H 파일에서

내가 쓴 : 내 .cpp 파일에서

afx_msg void OnLButtonUp(UINT nFlags, CPoint point); 

BEGIN_MESSAGE_MAP(CMyControl, COleControl) 

에 내가

하는 방법을 개발 한 다음
ON_WM_LBUTTONUP() 

추가
void CMyControl::OnLButtonUp(UINT nFlags, CPoint point) 

Windows 메시지 LButtonDown에 대해 동일한 작업을 수행했습니다.

내 컨트롤 안에 마우스 왼쪽 단추를두면 메서드가 핸들을 얻고 모든 것이 올바르게 작동합니다. 마우스 트래커가 CRectTracker 개체에있을 때 마우스 왼쪽 단추를두면 문제가 발생합니다. 이 경우 마우스 LButtonUp 메시지가 처리되지 않습니다.

Spy ++를 사용하려고했는데 Windows 메시지 WM_LButtonUp이 존재하며 예상대로 발생하는 것을 볼 수 있습니다. 하지만 내 코드, 그것은 (CRectTracker에 마우스의 경우) 처리되지 않습니다.

마우스가 CRectTracker에있는 동안 마우스 단추를 눌러도 LButtonDown 이벤트가 항상 성공적으로 처리됩니다.

LButtonUp 메시지에 어떤 문제가있을 수 있습니까? 추적기가 작동하는 방식의 단지 피할 수없는 부작용이다

감사

답변

0

. 트래커 또는 크기 조정 핸들 중 하나를 클릭하면 MFC가 마우스를 캡처하고 모달 메시지 루프를 시작합니다. 추적 작업을 구현하기 위해 마우스 이동 및 버튼 업 메시지를 선택합니다. 왼쪽 버튼을 누르는 메시지가 표시되거나 Esc 키가 표시되거나 캡처가 손실 될 때까지 루프가 종료되지 않습니다. 따라서 해당 루프가 활성화되어있는 동안 OnLButtonUp() 함수를 실행할 수 없으며 메시지가 전달되기 전에 차단되었습니다.

OnLButtonUp()에 의존하지 않고 다르게해야합니다. 왜 당신이 그것을 필요로하는지 설명하지 않았기 때문에 구체적인 조언을하기가 어렵습니다. 더 많은 통찰력이 필요하다면 모달 루프의 소스 ​​코드는 atlmfc/src/mfc/trckrect.cpp, CRectTracker :: TrackHandle()에 있습니다.

관련 문제