第一步:当然是建立一个继承自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);
}
}
第四步:当然是关联这个类到一个具体控件咯,最简单的方法就是给控件关联一个类的对象
本文介绍了如何通过创建CEdit子类并处理WM_MOUSEMOVE、WM_MOUSELEAVE等消息,实现编辑框边框颜色变化的美化效果。在鼠标悬停时,编辑框显示指定颜色的边框,离开时恢复默认样式。
1714

被折叠的 条评论
为什么被折叠?



