MouseEnter와 MouseLeave 이벤트 함수를 구현하려면 MouseMove 에서 _TrackMouseEvent 함수를 호출해 주면 된다. 그러면 컨트롤에 WM_MOUSEHOVER 와 WM_MOUSELEAVE 이벤트가 발생한다.
// Header
BEGIN_MESSAGE_MAP(CClass, CBase)
:
ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
:
END_MESSAGE_MAP()
LRESULT CClass::OnMouseHover(WPARAM wParam, LPARAM lParam)
LRESULT CClass::OnMouseLeave(WPARAM wParam, LPARAM lParam)
// Source
void CClass::OnMouseMove(UINT nFlags, CPoint point)
{
TRACKMOUSEEVENT trackmouseevent;
trackmouseevent.cbSize = sizeof(trackmouseevent);
// 서비스 플래그 : TME_CANCEL, TME_HOVER,
// TME_LEAVE, TME_NONCLIENT, TME_QUERY
trackmouseevent.dwFlags = TME_HOVER | TME_LEAVE;
trackmouseevent.hwndTrack = GetSafeHwnd();
// Hover Timeout 으로 TME_HOVER 플래그 적용시 반영된다.
// 시간이 작을수록 감도가 좋음.
trackmouseevent.dwHoverTime = 0x00000001;
_TrackMouseEvent(&trackmouseevent);
CBase::OnMouseMove(nFlags, point);
}
MSDN의 _TrackMouseEvent
Original Post : http://neodreamer-dev.tistory.com/26
No comments :
Post a Comment