MFC重绘文本框控件

这次来一个简单一点的文本框重绘
实现了背景颜色和文本颜色大小

.h文件

#pragma once
#include "afxwin.h"

class MyEdit :public CEdit{

public:
	MyEdit();
	~MyEdit();

private:
	//背景颜色
	COLORREF m_bkColor;
	//文字颜色
	COLORREF m_txtColor;
	//背景刷子
	CBrush   m_bkBrush;
public:
	DECLARE_MESSAGE_MAP()
	void SetBkColor(COLORREF color);
	afx_msg void OnNcPaint();
	afx_msg HBRUSH CtlColor(CDC* /*pDC*/, UINT /*nCtlColor*/);
};

.cpp文件

#include "StdAfx.h"
#include "MyEdit.h"

MyEdit::MyEdit(){
	m_bkColor = RGB(0, 0, 0);
	m_txtColor = RGB(100, 100, 100);
	m_bkBrush.CreateSolidBrush(m_bkColor);
}

MyEdit::~MyEdit()
{
	m_bkBrush.DeleteObject();
}


BEGIN_MESSAGE_MAP(MyEdit, CEdit)
	ON_WM_NCPAINT()
	ON_WM_CTLCOLOR_REFLECT()
END_MESSAGE_MAP()

//设置背景色
void MyEdit::SetBkColor(COLORREF color){
	m_bkColor = color;
	if (m_bkBrush.GetSafeHandle()) m_bkBrush.DeleteObject();
	m_bkBrush.CreateSolidBrush(color);
	Invalidate(TRUE);
}

//重绘
void MyEdit::OnNcPaint(){
	CRect rect, rc;
	CDC* pDC;
	int  nSaveDC;

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

	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(RGB(150, 150, 150)));
	ReleaseDC(pDC);
}

//返回画笔
HBRUSH MyEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
	// TODO:  在此更改 DC 的任何特性
	pDC->SetTextColor(m_txtColor);
	pDC->SetBkColor(m_bkColor);
	// TODO:  如果不应调用父级的处理程序,则返回非 null 画笔
	return m_bkBrush;
}

调用 在Dlg.h中先声明一个MyEdit myEdit;变量
再在Dlg.cpp中创建

//编辑框重绘
myEdit.Create(WS_VISIBLE | ES_READONLY | ES_AUTOVSCROLL | ES_MULTILINE | ES_WANTRETURN | WS_CLIPCHILDREN | WS_EX_COMPOSITED,CRect(100, 600, 800, 1000), this, IDC_MYEDIT);

函数细节可以看微软MFC微软学习

编辑框内容不多,可以摸索一下

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楠风丶北枝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值