class CXPbutton : public CWindowImpl<CXPbutton,CButton>
{
public:
BOOL _bMouseTrack ;
CXPbutton()
{
}
BEGIN_MSG_MAP(CXPbutton)
MESSAGE_HANDLER(WM_MOUSEHOVER, OnMouseHover)
MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseMove)
MESSAGE_HANDLER(WM_MOUSELEAVE, OnMouseLeave)
END_MSG_MAP()
LONG OnMouseHover(UINT uMsg,WPARAM wParam,LPARAM lParam,BOOL& bHandled)
{
return 0;
}
LONG OnMouseMove(UINT uMsg,WPARAM wParam,LPARAM lParam,BOOL& bHandled)
{
if (_bMouseTrack) // 若允许 追踪,则。
{
TRACKMOUSEEVENT csTME;
csTME.cbSize = sizeof (csTME);
csTME.dwFlags = TME_LEAVE|TME_HOVER;
csTME.hwndTrack = m_hWnd ;// 指定要 追踪 的窗口
csTME.dwHoverTime = 10; // 鼠标在按钮上停留超过 10ms ,才认为状态为 HOVER
::_TrackMouseEvent (&csTME); // 开启 Windows 的 WM_MOUSELEAVE , WM_MOUSEHOVER 事件支持
_bMouseTrack=FALSE ; // 若已经 追踪 ,则停止 追踪
}
return 0;
}
LONG OnMouseLeave(UINT uMsg,WPARAM wParam,LPARAM lParam,BOOL& bHandled)
{
_bMouseTrack=TRUE ;
return 0;
}
private:
};
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/my_c_s_d_n/archive/2010/03/23/5408897.aspx