2011-04-19 4 views
0

커서가 MFC의 단추 중심에 충분히 가깝게 있으면 MouseMove 이벤트에서 위치가 변경되는 단추를 어떻게 만들 수 있습니까?MFC Unclickable Button (MouseMove의 커서에서 멀리 이동)

+0

상당히 짜증납니다. :) –

+0

사용자가 창 경계 또는 모서리에 대해 버튼을 밀 때 수행 할 작업은 무엇입니까? –

답변

2

WM_MOUSEMOVE는 커서가 위에 있지 않으면 캡처되지 않지만 원하는 것은 아닙니다. 따라서 부모 대화 상자에서 WM_MOUSEMOVE를 처리해야합니다. 단추가 자체 포함 된 컨트롤이되도록하려면 단추를 만들 때 부모 창의 하위 클래스를 만들어야합니다.

서브 클래스는,이 맥락에서 의미
- 당신은 검색과의 getParent (와 부모의 창 시저의 주소를 저장) ->를 GetWindowLong (GWL_WNDPROC)
- 당신은 SetWindowLong()
와 프로 시저로 설정 - 프로 시저에서 WM_MOUSEMOVE를 원하는 방식으로 처리 한 후 부모의 이전 창 proc를 호출합니다.

1

WM_MOUSEMOVE 좌표는 화면에 상대적이지만 좌표가 포함 된 창을 기준으로 버튼 위치를 추적하려고합니다. 부모 창에서 ScreenToClient 메서드를 사용하여 변환하면 좌표를 비교하여 가까이 있는지 확인할 수 있습니다. 그런 다음 MoveWindow를 사용하여 단추를 이동하십시오.

0

마우스 커서 위치를 추적하면 커서가 단추 창 rect에 가까워 지거나 들어갈 때를 결정할 수 있습니다. 그런 다음 SetWindowPos() 함수를 사용하여 부모 창 클라이언트 영역에서 단추 창을 재배치 할 수 있습니다.