在使用MFC处理鼠标滑过按钮,以实现按钮的多态时候,非常简单,重写mousemove消息处理函数即可。但是使用win32 实现消息处理,却容易犯错,以后同样在WM_MOUSEMOVE消息处理即可。
鼠标滑过按钮窗体时候,触发WM_MOUSEMOVE,此时启动一个TrackMouseEvent事件,即为跟踪鼠标状态。
LRESULT BtnWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch(uMsg)
{
case WM_MOUSEMOVE:
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = hWnd;
tme.dwFlags = TME_LEAVE | TME_HOVER;
tme.dwHoverTime = 30;
TrackMouseEvent(&tme);
}
break;
case WM_MOUSELEAVE: //当鼠标指针离开按钮时,触发该消息函数
{
hdc = GetDC(hWnd);
if ( m_bCapture == true) //鼠标按下
{
}
else
{
}
}
break;
case WM_MOUSEHOVER: //当鼠标指针位于按钮之上时,触发该消息函数
{
if ( m_bCapture == true) //鼠标按下
{
}
else
{
}
}
break;
//....