用MFC做漂亮界面之美化标题(使用静态控件)

上次,我们已经为我们的对话框添加了关闭按钮,最小化按钮,今天,我们一起为它添加一个标题。因为我们的对话框没有标题栏,所以我们需要添加一个静态控件(Static),来显示标题。

首先我们为对话框添加一个静态控件,并修改它的Caption属性为用户登录,具体如下:

第2步,修改它的ID为IDC_STATIC_CAPTION,具体设置如下:

现在,编译程序效果如下:

大家看到了,现在的标题栏非常丑陋,与背景不协调,现在我们就来美化它,具体步骤如下:

第1步,创建一个MFC类,名称为CCaption,继承自CStatic。

第2步,为其添加一个成员函数HBRUSH CtlColor(CDC* pDC, UINT nCtlColor),当用户界面需要刷新的时候,对话框会收到WM_CTLCOLOR消息,然后它会将这个消息反射给它的所有控件,如果控件中做了消息反射处理(ON_WM_CTLCOLOR_REFLECT()),那么这个控件的背景刷新就不用在对话框的OnCtlColor成员函数中处理,只需要在它的成员函数CtlColor中处理就可以,这样编写代码有利于面向对象的封装,它的具体代码如下:

BEGIN_MESSAGE_MAP(CCaption, CStatic)
	ON_WM_CTLCOLOR_REFLECT()
END_MESSAGE_MAP()

// CCaption 消息处理程序

HBRUSH CCaption::CtlColor(CDC* pDC, UINT nCtlColor)
{
	// TODO:  在此更改 DC 的任何特性
	CFont font;
	LOGFONT lf;
	if (!pDC)
		return NULL;
        //创建一个空画刷,返回这个画刷可以让静态控件的背景透明
       HBRUSH hr = (HBRUSH)GetStockObject(NULL_BRUSH);
        //让文字的背景透明
       pDC->SetBkMode(TRANSPARENT);
        //设置文字的颜色为白色
       pDC->SetTextColor(RGB(255, 255, 255));
      ::ZeroMemory(&lf, sizeof(lf));
        //设置逻辑字体的高度  
       lf.lfHeight = 12;
        //设置逻辑字体为粗体字
       lf.lfWeight = FW_BOLD;
        //设置字体为黑体
       ::lstrcpy(lf.lfFaceName, _T("黑体"));
        //用逻辑字体创建一个CFont对象
       font.CreateFontIndirect(&lf);
        //应用字体
       pDC->SelectObject(&font);
	return hr;
}
注意,千万不要忘记在Caption.cpp中添加WM_CTLCOLOR消息反射宏,这里是ON_WM_CTLCOLOR_REFLECT()。

第3步,为其添加一个成员函数Init,用来初始化标题栏的位置,具体如下:

void CCaption::Init(int nX, int nY, int nW, int nH)
{
	MoveWindow(nX, nY, nW, nH);
}
第4步,为对话框中的静态控件IDC_STATIC_CAPTION添加一个成员变量,类型CStatic,名称为m_staticCap,然后修改它的类型为CCaption。

第5步,在对话框的OnInitDialog中添加标题栏的位置初始化,具体代码如下:

m_staticCap.Init(10, 12, 100, 20);
第6步,编译程序,最终效果如下:

今天我们一起完成了标题栏的美化工作,下次我们一起学习如何美化编辑框控件,从而完成用户登录界面的最终设计。





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

孟建行

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

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

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

打赏作者

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

抵扣说明:

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

余额充值