【MFC基础】20字体和颜色

1、改变对话框的底色

在对话框的类中添加一个 private : CBrush m_brush;的成员变量。在类的构造函数中添加如下代码:

m_brush.CreateSolidBrush(RGB(0,0,255));    //初始化为蓝色

为对话框添加一个WM_CTLCOLOR消息响应函数,专门为控件着色的消息响应函数,代码如下:

HBRUSH CSettingDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{ 
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
	//return hbr;                        /*这里特意将系统返回的画刷屏蔽*/ 
	return m_brush;                      /*返回自己制定的蓝色画刷*/ 
}

2、设置对话框控件的底色和文字颜色

只要将上面

return m_brush;

改为:

if (pWnd->GetDlgCtrlID()==IDC_LINE_STYLE)    /*如果控件的名称为IDC_LINE_STYLE*/ 
{ 
	pDC->SetTextColor(RGB(0,255,0));  /*将色彩容器中的文字颜色设置为绿色*/
	//pDC->SetBkMode(TRANSPARENT);  /*设置文字的背景为透明,否则文字背景认为系统默认色*/
	pDC->SetBkColor(RGB(255,0,0));  /*设置文字的背景色,注意如果写了上面句的话,背景色无效*/ 
	return m_brush;               /*返回1中自定义的画刷句柄,这里注意虽然要求返回的是画刷的句柄,但是我们这里放置一个CBrush对象,不会出错。是因为CBrush有一个HBRUSH的重载*/ 
} 
return hbr;            /*否则的话返回系统默认的画刷句柄*/

注意如果要设置单行EDIT的文字背景色,需要使用SetBkColor设置,而SetBkMode即使为透明,文字的背景仍为系统的默认色。

3、在对话框控件响应OnPaint消息时,将一个静态文本显示所设置字体的文字

添加一个静态文本框,改名为IDC_TEXT。添加一个字体成员变量 private: CFont font;在对话框的构造函数中对字体进行初始化:

m_font.CreatePointFont(200,"华文行楷");

在2的return hbr;之前加入如下代码:

if (pWnd->GetDlgCtrlID()==IDC_TEXT)  /*如果为ID号所指的静态文本框*/ 
{ 
	pDC->SelectObject(&m_font);   /*则将绘图设备加入所需的字体。*/ 
}

注意,因为OnPaint消息响应函数是在控件被绘制之前触发的,它所返回的HBRUSH画刷句柄,便携带了我们所设置的这些属性。

4、如果要改变OK按钮的文字颜色

靠上面的方式是不行的。我们需要创建一个新的从CButton类继承的CTestBtn类,并用类向导添加一个类的DrawItem的虚函数,加入以下代码(可以从CButton的例子中复制):

 // TODO: Add your code to draw the specified item 
    UINT uStyle = DFCS_BUTTONPUSH;
 
   // This code only works with buttons. 
   ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);
 
   // If drawing selected, add the pushed style to DrawFrameControl. 
   if (lpDrawItemStruct->itemState & ODS_SELECTED) 
      uStyle |= DFCS_PUSHED;
 
   // Draw the button frame. 
   ::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem, 
      DFC_BUTTON, uStyle);
 
   // Get the button's text. 
   CString strText; 
   GetWindowText(strText);
 
   // Draw the button text using the text color red. 
   COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, RGB(255,0,0));/*设置按钮的字体为红色。将返回的原先的颜色暂时保存*/ 
   ::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(), 
      &lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER); 
   ::SetTextColor(lpDrawItemStruct->hDC, crOldColor);

然后,右键选择OK按钮,用向导创建一个关联的成员变量m_btnTest,从新创建的CTestBtn类继承。在OK按钮的属性页-〉Styles-〉Owner Draw选中,否则OK按钮仍然继承默认的CButton类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SuperJun12345

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

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

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

打赏作者

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

抵扣说明:

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

余额充值