您的位置:首页 > 其它

自绘编辑框CEdit(继承CEdit方式)

2015-12-09 17:11 260 查看
对于自定义控件, 我们可以这样理解: 我们要处理控件的行为和显示. 我这里的需求只需要自定义编辑框的显示即可, 行为则使用默认即可. 通过重载CEdit就可以实现.

1. 主要实现内容

显示主要有: 边框, 背景, 文字颜色, 禁用态的各种颜色.

2. 边框

边框可以通过重载OnNCPaint实现. 

例如:
void CMyEdit::OnNcpaint()
{
CRect rect, rc;
CDC* pDC;
int  nSaveDC;

pDC = GetWindowDC();
GetWindowRect(&rect);
rect -= rect.TopLoeft();

rc = rect;
rc.InflateRect(-GetSystemMetrics(SM_CXEDGE), -GetSystemMetrics(SM_CYEDGE));

nSaveDC = pDC->SaveDC();
pDC->ExcludeClipRect(&rc);
pDC->FillSolidRect(&rect, RGB(255,255,255));
pDC->RestoreDC(nSaveDC);

pDC->FrameRect(&rect, &CBrush(150,150,150));
ReleaseDC(pDC);
}

3. 背景

背景可以通过重载OnEraseBkgnd实现
BOOL CMyEdit::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return 0;
return CEdit::OnEraseBkgnd(pDC);
}


你也可以贴图:
BOOL CMyEdit::OnEraseBkgnd(CDC* pDC)
{
//TODO: 在此添加消息处理程序代码和/或调用默认值
CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(&m_Bitmap);
BITMAP m_Bmp;
m_Bitmap.GetBitmap(&m_Bmp);
CRect rect;
GetClientRect(&rect);
//拉伸贴图
pDC->StretchBlt(0,0,rect.Width() ,rect.Height(),&memDC,0,0,m_Bmp.bmWidth,m_Bmp.bmHeight,SRCCOPY);
memDC.DeleteDC();
return TRUE;
//return CEdit::OnEraseBkgnd(pDC);
}

4. 字体颜色

HBRUSH CMyEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetBkMode(TRANSPARENT);					// 透明
pDC->SetTextColor(RGB(255, 255, 255));			// 字体色彩
return (HBRUSH)GetStockObject(DKGRAY_BRUSH);	// 字体背景(OnEraseBkgnd只是避免闪烁)
}

5. 小结

通过重载这几个函数, 就实现了编辑框显示的自绘.
http://bbs.csdn.net/topics/340257075 http://bbs.csdn.net/topics/190119634 http://blog.csdn.net/xianglitian/article/details/1728920
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: