第一步:当然是建立一个继承自CEdit的子类
第二步:为类添加WM_MOUSEMOVE 并增加WM_MOUSELEAVE WM_MOUSELEAVE等的消息映射,具体方法见上篇文章
第三步:具体代码
其中m_BoundryBrush为一个画刷,构造函数中m_BoundryBrush.CreateSolidBrush(RGB(200,200,200));具体数值可自行设定
void CMYedit::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (!m_bTracking)
{
TRACKMOUSEEVENT Tme;
Tme.cbSize = sizeof(Tme);
Tme.hwndTrack = GetSafeHwnd(); //整个这段代码就是设置鼠标消息追踪
Tme.dwFlags = TME_LEAVE|TME_HOVER; //追踪消息可以设置TME_LEAVE|TME_HOVER
Tme.dwHoverTime = 1;
if (_TrackMouseEvent(&Tme))
m_bTracking=TRUE;
}
CEdit::OnMouseMove(nFlags, point);
}
LRESULT CMYedit::OnMouseHover(WPARAM wParam, LPARAM lParam)
{
m_bHover=TRUE;
RedrawWindow(NULL,NULL,RDW_FRAME|RDW_INVALIDATE);
return 0;
}
LRESULT CMYedit::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
m_bTracking=m_bHover=FALSE;
RedrawWindow(NULL,NULL,RDW_FRAME|RDW_INVALIDATE);
return 0;
}
void CMYedit::OnNcPaint()
{
CWindowDC dc(this);
CRect Rect;
GetWindowRect(&Rect);
if(m_bHover)
{
dc.SelectObject(m_BoundryBrush);
dc.Rectangle(0,0,Rect.Width(),Rect.Height());
}
else
{
dc.DrawEdge(CRect(0,0,Rect.Width(),Rect.Height()),EDGE_SUNKEN,BF_FLAT|BF_RECT);
}
}
第四步:当然是关联这个类到一个具体控件咯,最简单的方法就是给控件关联一个类的对象