훈, IT 공부/C,C++,MFC

[MFC] WM_MOUSEHOVER, WM_MOUSELEAVE 메시지 이용방법

IT훈이 2018. 5. 7.
반응형

MFC 마우스관련 메시지 핸들러 


헷갈리는 부분 정리해봅니다.


 WM_MOUSEHOVER, WM_MOUSELEAVE 


WM_MOUSEHOVER, WM_MOUSELEAVE 메시지는 일반 메시지 처럼 메시지 함수를 추가한다고 해서 메시지를 처리하는 것이 아니라. WM_MOUSEMOVE 메시지 핸들러 안에서 TrackMouseEvent()함수를 이용하여 약간의 특별한 설정을 해주어야만 메시지가 발생하는 구조를 갖는다고 합니다.


TrackMouseEvent()함수는 아래와  같이 4가지 메시지를 발생시킵니다.


WM_NCMOUSEHOVER, WN_NCMOUSELEAVE, WM_MOUSEHOVER, WM_MOUSELEAVE


그러므로 WM_MOUSEMOVE 메시지를 처리하는 클래스에서 TrackMouseEvent()함수를 추가하여 작성하여야만 합니다.



BOOL m_bTrackMouse = FALSE;

void ButtonOnToolWnd::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

if(!m_bTrackMouse)

{

TRACKMOUSEEVENT tme;

tme.cbSize = sizeof(tme);

tme.hwndTrack = m_hWnd;

tme.dwFlags = TME_LEAVE|TME_HOVER;

tme.dwHoverTime = 1;

if(TrackMouseEvent(&tme))

                {

                          m_bTrackMouse = TRUE;

                 }

}

CButton::OnMouseMove(nFlags, point);

}


void ButtonOnToolWnd::OnMouseHover(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

AfxMessageBox(_T("OnMouseHover()"));

CButton::OnMouseHover(nFlags, point);

}



void ButtonOnToolWnd::OnMouseLeave()

{

// TODO: Add your message handler code here and/or call default

AfxMessageBox(_T("OnMouseLeave()"));

CButton::OnMouseLeave();

}


http://micropilot.tistory.com/2169

참조 사이트

반응형

댓글