MFC如何设置对话框的背景和字体颜色

MFC如何设置对话框的背景和字体颜色,第1张

---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下: ---- ① 新建一个基于Dialog的MFC AppWizard应用程序ExampleDlg。 ---- ②在CExampleDlgApp ::InitInstance()中添加如下代码: BOOL CExampleDlgApp: : InitInstance ( ) { … CExampleDlgDlg dlg; m_pMainWnd = &dlg; //先于DoModal()调用,将对话框设置为蓝色背景、红色文本 SetDialogBkColor(RGB(0,0,255),RGB(255,0,0)); //第一个为背景 第二个为字体 int nResponse = dlgDoModal(); … } ---- 编译并运行,此时对话框的背景色和文本色已发生了改变。值得注意的是:在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。 ---- 方法二:重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准): void CExampleDlgDlg::OnPaint() { if (IsIconic()) … else { CRect rect; CPaintDC dc(this); GetClientRect(rect); dcFillSolidRect(rect,RGB(0,255,0)); //设置为绿色背景 CDialog::OnPaint(); } ---- 方法三:重载OnCtlColor (CDC pDC, CWnd pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准): ---- ①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量: class CExampleDlgDlg : public CDialog { protected: CBrush m_brush; }; ---- ②在OnInitDialog()函数中添加如下代码: BOOL CExampleDlgDlg::OnInitDialog() { // TODO: Add extra initialization here m_brushCreateSolidBrush(RGB(0, 255, 0)); // 生成一绿色刷子 } ---- ③利用ClassWizard重载OnCtlColor(…),即WM_CTLCOLOR消息: HBRUSH CExampleDlgDlg::OnCtlColor (CDC pDC, CWnd pWnd, UINT nCtlColor) { / 这里不必编写任何代码! 下行代码要注释掉 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); / return m_brush; //返加绿色刷子 } ---- 方法四:还是重载OnCtlColor (CDC pDC, CWnd pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准): ---- 步骤①、②同上方法三中的步骤①、②。

ASSERT(m_hObject == NULL); //这是1156行

这里出错就是因为m_hObject 不是空的,为什么呢?因为已经赋值了,已经初始化了。也就是你多次Create了。

fontCreateFontIndirectW(lf);

只能用一次。

还有要用fontCreateFontIndirect,

//改字体: 首先要把静态控件ID名称改一下IDC_STATIC1

//新建全局变量: CFont font;

//在OnInitDialog()中: 

//fontCreatePointFont(480, _T("宋体"));

//GetDlgItem(IDC_STATIC1)->SetFont(&font);

//改颜色:

//窗体增加WM_CTLCOLOR消息响应

//在OnCtlColor()中:

//if (pWnd == GetDlgItem(IDC_STATIC1))

//{

// pDC->SetTextColor(RGB(255, 0, 0));

//}

MFC对话框程序,改变字体要比改变控件大小困难的多。

改变控件大小,一个Movewindow函数,可以适合任何允许改变大小的控件了。但字体,不同控件方法完全不一样。

其中,静态文本最简单,直接定义一个CFont,设置好之后SetFont就可以了。

而其它控件,如按钮。。。老麻烦了,改变字体大小必须重载按钮类,自己通过自绘来控制TextOut画笔才可以实现(

参考资料:

百度搜“VC改变对话框按钮字体”,文库就有)。ps:颜色好改,字体难弄

如果非要实现这个功能,只能是对你界面上所有的非静态控件的类型,分别重载一个新的类,自己做一个SetFont的方法,才能统一实现。

下面例子是装(调)入MS Song 中文字体。

关键语句:

fontCreateFontIndirect(&lf); // 建字体

oldfont = pDC->SelectObject(&font); //用字体

LOGFONT

lf;

lflfHeight = 240;

lflfWidth = 120;

lflfEscapement = m_ang;

lflfOrientation = m_ang;

lflfWeight = 520;

lflfItalic = 0;

lflfUnderline = 0;

lflfStrikeOut = 0;

lflfCharSet = GB2312_CHARSET;

lflfOutPrecision = 0;

lflfClipPrecision = CLIP_STROKE_PRECIS;

lflfQuality = 0;

lflfPitchAndFamily = 0;

strcpy(lflfFaceName, "MS Song");

fontCreateFontIndirect(&lf);

oldfont = pDC->SelectObject(&font);

TextOut后,就是 MS Song 中文 字符。

字体名字错误。mfc是微软基础类库的简称,其窗口设置字体不生效的原因是字体名字错误。mfc是微软公司实现的一个c++类库,主要封装了大部分的windowsAPI函数,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。

以上就是关于MFC如何设置对话框的背景和字体颜色全部的内容,包括:MFC如何设置对话框的背景和字体颜色、(MFC)editview类中设置窗口字体、MFC 请教怎样设置STATIC TEXT控件的字体大小和颜色等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9623713.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存