编辑框的基本美化

本文介绍了如何通过创建CEdit子类并处理WM_MOUSEMOVE、WM_MOUSELEAVE等消息,实现编辑框边框颜色变化的美化效果。在鼠标悬停时,编辑框显示指定颜色的边框,离开时恢复默认样式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步:当然是建立一个继承自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);
}
}

第四步:当然是关联这个类到一个具体控件咯,最简单的方法就是给控件关联一个类的对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值