MFC定义圆角矩形按钮

本文介绍了如何在MFC中创建圆角矩形按钮,只需两个简单步骤:将CButton替换为CBtnNoImg类,并设置不同状态的颜色及可选字体。
摘要由CSDN通过智能技术生成

使用仅需两步!

第一步:

CButton替换为CBtnNoImg。

第二步:

设置各个状态的颜色,和字体(字体设置可选)

	{
		CFont *pFont = new CFont();
		pFont->CreateFont(11, //以逻辑单位方式指定字体的高度
			0, //以逻辑单位方式指定字体中字符的平均宽度
			0, //指定偏离垂线和X轴在显示面上的夹角(单位:0.1度)
			0, //指定字符串基线和X轴之间的夹角(单位:0.1度)
			FW_NORMAL, //指定字体磅数
			FALSE, //是不是斜体
			FALSE, //加不加下划线
			0, //指定是否是字体字符突出
			ANSI_CHARSET, //指定字体的字符集
			OUT_DEFAULT_PRECIS, //指定所需的输出精度
			CLIP_DEFAULT_PRECIS, //指定所需的剪贴精度
			DEFAULT_QUALITY, //指示字体的输出质量
			DEFAULT_PITCH|FF_SWISS, //指定字体的间距和家族
			_T("宋体") //指定字体的字样名称
			);
		m_btnIWantCheck.Init(RGB(255,255,255),
			RGB(255,136,0),RGB(0,129,204),RGB(255,110,0),RGB(127,127,127));
		m_btnIWantCheck.SetFont(pFont);
	}


文件清单:

#pragma once


// CBtnNoImg
/*
测试环境:vs2010sp1
最后更新:2015-03-20 by kagula
*/

class CBtnNoImg : public CButton
{
	DECLARE_DYNAMIC(CBtnNoImg)

public:
	CBtnNoImg();
	virtual ~CBtnNoImg();

protected:
	DECLARE_MESSAGE_MAP()
public:
	void Init(COLORREF clrFont, COLORREF clrBKFocus, COLORREF clrBKUnfocus,COLORREF clrBKSelected, COLORREF clrBKDisable);
	void SetFont(CFont* pFont, BOOL bRedraw = TRUE);

	virtual BOOL Create(LPCTSTR lpszCaption, DWORD dwStyle, const R
MFC 中创建圆角矩形按钮,可以使用 `CButton` 类的派生类,自定义绘制函数来实现。下面是一份示例代码: 1. 创建一个自定义按钮类 `CRoundRectButton` ```c++ class CRoundRectButton : public CButton { public: CRoundRectButton(); virtual ~CRoundRectButton(); protected: virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); }; ``` 2. 在 `CRoundRectButton` 类中实现 `DrawItem` 函数,用于绘制圆角矩形按钮 ```c++ void CRoundRectButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC); CRect rect = lpDrawItemStruct->rcItem; if (lpDrawItemStruct->itemState & ODS_SELECTED) // 按下状态 { pDC->FillSolidRect(rect, ::GetSysColor(COLOR_BTNFACE)); pDC->DrawEdge(rect, EDGE_SUNKEN, BF_RECT); } else // 正常状态 { pDC->FillSolidRect(rect, ::GetSysColor(COLOR_BTNFACE)); pDC->DrawEdge(rect, EDGE_RAISED, BF_RECT); } // 绘制圆角矩形 int nRound = 10; // 圆角大小 CRect roundRect(rect.left + 2, rect.top + 2, rect.right - 2, rect.bottom - 2); pDC->RoundRect(roundRect, CPoint(nRound, nRound)); } ``` 3. 在对话框类中添加 `CRoundRectButton` 控件,并设置样式 ```c++ CRoundRectButton m_btnRound; m_btnRound.Create(_T("圆角按钮"), WS_CHILD | WS_VISIBLE | BS_OWNERDRAW, CRect(50, 50, 150, 80), this, IDC_BTN_ROUNDRECT); ``` 在上面的代码中,`m_btnRound` 是一个 `CRoundRectButton` 类的对象,通过 `Create` 函数创建一个圆角矩形按钮,并设置样式为 `WS_CHILD | WS_VISIBLE | BS_OWNERDRAW`,其中 `BS_OWNERDRAW` 表示该按钮使用自定义绘制函数。 运行程序后即可看到一个圆角矩形按钮
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

kagula086

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

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

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

打赏作者

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

抵扣说明:

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

余额充值