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
▲ 참조 사이트
'훈, IT 공부 > C,C++,MFC' 카테고리의 다른 글
[궁금점]winApi WriteFile 함수의 동작 (0) | 2018.06.02 |
---|---|
궁금점, 파일을 읽을때 NULL 문자를 읽을까? (0) | 2018.05.31 |
[MFC]MFC 버튼을 이용한 프로젝트 #1 버튼 추가 + 사이즈조절 (2) | 2018.05.07 |
[MFC] Dialog 크기조절 관련 함수,메시지 (0) | 2018.05.01 |
[MFC] DC, CDC 관련하여 정리 (2) | 2018.05.01 |
댓글