Рецептик для WM_MOUSELEAVE и WM_MOUSEHOVER.
От: nixy Россия  
Дата: 07.02.02 20:05
Оценка:
Рецептик для WM_MOUSELEAVE и WM_MOUSEHOVER.
-------------------------------------------

#define ON_WM_MOUSELEAVE() \
{ WM_MOUSELEAVE, 0, 0, 0, AfxSig_bv, (AFX_PMSG)(AFX_PMSGW) \
(int (AFX_MSG_CALL CWnd::*)(void))&OnMouseLeave },
#define ON_WM_MOUSEHOVER() \
{ WM_MOUSEHOVER, 0, 0, 0, AfxSig_vwp, \
(AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(UINT, CPoint))&OnMouseHover },

...............

void CMyWnd::OnMouseMove(UINT nFlags, CPoint point)
{
// заряжаем трекинг WM_MOUSELEAVE
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE;
_TrackMouseEvent(&tme);

// заряжаем вдогонку WM_MOUSEHOVER
// если мышку двинули до того, как всплыло сообщение
// произойдет перезарядка (обнуление таймера)
tme.dwFlags = TME_HOVER;

// время срабатывания по умолчанию, вообще задается в миллисекундах
tme.dwHoverTime = HOVER_DEFAULT;
_TrackMouseEvent(&tme);

if(!m_MouseInside) {
m_MouseInside = true;
Invalidate();
UpdateWindow();
}

CWnd::OnMouseMove(nFlags, point);
}

int CMyWnd::OnMouseLeave()
{
// чего-то делаем
return 0;
}

int CMyWnd::OnMouseHover(UINT nFlags, CPoint point) {
// еще чего-то делаем
return 0;
}
...............

Счастья Вам!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.