2008/01/10

Mouse Enter 와 Leave 함수 구현하기

코드기어(예전 볼랜드) 툴에는 컨트롤 마다 MouseEnter와 MouseLeave 이벤트 핸들러를 기본적으로 지원하기 때문에 별다른 작업 없이 Mouse Enter 와 Leave 이벤트를 사용할 수 있었는데 VC에서는 기본적인 이벤트 핸들러만 제공하기 때문에 개발자가 WM_MOUSEHOVER와 WM_MOUSELEAVE 이벤트가 발생하도록 작성해 주어야 한다.

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