---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下: ---- ① 新建一个基于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画笔才可以实现(
参考资料:
如果非要实现这个功能,只能是对你界面上所有的非静态控件的类型,分别重载一个新的类,自己做一个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控件的字体大小和颜色等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)