MFC窗口各控件的颜色和字体的设置
2011-04-23 07:15
477 查看
很多人定义了基于MFC的程序项目,当设计界面使用控件时,却不知道如何对各控件进行字体与颜色的设计;其实这些修改是需要动手添加代码的,这方面的修改在控件属性里是没有现成的,这不同于.net定义的项目,它的是有直接属性修改的。我在原文的基础上做了修改与完善,也可参见原文 原文:http://www.study-code.com/visual-studio/vc/74759.htm 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; /*返回自己制定的蓝色画刷*/ } 当然,.h文件里也要对函数进行预定义的;此时,该对话框的背景色已经全为蓝色了。 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 m_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的虚函数,类与虚函数都可以用向导来定义,加入以下代码: // 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类。 |
相关文章推荐
- MFC窗口各控件的颜色和字体的设置
- MFC窗口各控件的颜色和字体的设置【转】
- MFC窗口各控件的颜色和字体的设置
- MFC窗口各控件的颜色和字体的设置
- MFC窗口各控件的颜色和字体的设置
- MFC窗口各控件的颜色和字体的设置
- MFC窗口各控件的颜色和字体的设置
- MFC窗口各控件的颜色和字体的设置(转)
- OnCtlColor函数:MFC设置静态文本框,编辑框等控件背景和字体颜色
- MFC 控件字体样式和颜色设置
- OnCtlColor函数:MFC设置静态文本框,编辑框等控件背景和字体颜色
- MFC 使用static控件显示时间 并设置控件的字体格式和颜色
- OnCtlColor函数:MFC设置静态文本框,编辑框等控件背景和字体颜色
- MFC窗口的颜色和字体的设置
- MFC 可以设置背景色、字体、字体颜色、透明背景的 Static 静态文本控件
- MFC——设置控件文本字体、大小、颜色、背景
- OnCtlColor函数:MFC设置静态文本框,编辑框等控件背景和字体颜色
- MFC设置静态文本框,编辑框等控件背景和字体颜色
- OnCtlColor函数:MFC设置静态文本框,编辑框等控件背景和字体颜色
- MFC 可以设置背景色、字体、字体颜色、透明背景的 Static 静态文本控件