본문 바로가기

Language/MFC

MouseWheel강제 호출

듀얼 모니터를 사용할때 프로그램을 두 모니터 모우띄울때가 있었다. 그때 각 클래스단위로 모니터 하나씩 화면에 띄우게 되는데 한쪽에서 휠다운이나 휠 업이 일어나면 함께 움직이게 하는 프로그램 코딩중 마우스 휠때문에 엄청 얘먹은 적이 있었는데 휠 이벤트를 이걸로 해결했다지.....ㅋㅋㅋ

::SendMessage() 로 호출하여 다른 클래스의 화면이나 메시지 이벤트를 보낸다.
이때 API함수로 호출을 해야 보내고자 하는 윈도우 나 컨트롤 등의 핸들을 넣을 인자값이 나온다.

처음에 이거몰라서 쫌 짜증났다.ㅡ.ㅡ 데브피아 화이팅이라고 하지...ㅋㅋㅋ
SendMessage()(API라고 가정하자)는 많이 써봤을 것이다. SendMessage는 API탭에 보면 있다.ㅋㅋㅋㅋ(또 쓰기 귀찬아.ㅡㅡ)

마우스 휠 함수를 강제로 호출할때 여기서 가장 중요한건 어디서 휠이 일어 났는지를 알려주는 좌표가 아니라 휠이 업이 됐냐 다운이 됐냐이다.

참고로 이건 MSDN을 봐도 나오나?;;;난 못찾았다.ㅡ0ㅡ 그럼 없는거야 내눈엔 않보였응께..

아래의 인자와 함께 넣어준다...

참고로 핸들은 Modal형식으로 윈도우를 띄울때 메인 Class에서 우선 다 받아와야한다.
(참...이건 내가 코딩했던 기준...이니까....태클은 없겠지만....이건..머..뎃글이 달려야 태클도 있지..ㅋㅋ)

HWND hWnd = 메세지 받을 윈도우 핸들;
CPoint point = 원하는 좌표;
WORD wKeyState = 0;
wKeyState |= (::GetKeyState(VK_CONTROL) < 0) ? MK_CONTROL : 0;
wKeyState |= (::GetKeyState(VK_SHIFT) < 0) ? MK_SHIFT : 0;

// -WHEEL_DELTA는 Down, +는 Up
::SendMessage(hWnd, WM_MOUSEWHEEL, MAKEWPARAM(wKeyState, ±WHEEL_DELTA), MAKELPARAM(point.x, point.y));

이 형식으로 코딩하여 호출한다음 디버그로 OnMouseWheel 의 zDelta의 값을 보면 120이 들어오는게 아니라 이동된 거리가 매개변수로 들어간다 물론 방향(UP?DOWN?)은 부호+.- 로 구분하여 들어오게 된다. 그러므로....적절하게 처리하는 센스가 필요하다.