1.MFC如何设置背景颜色
首先,为对话框添加WM_CTLCOLOR消息,方法为:右击Dialog窗口 --> Class Wizard --> Messages --> WM_CTLCOLOR --> Add Handler --> Edit Code
然后,在Dlg.h文件中添加成员变量CBrush m_brush;
接着,在之前Edit Code的位置,写上
HBRUSH CMFCInterfaceDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { return m_brush; }
最后,在Dlg.cpp文件的OnInitDialog()函数后面加上m_brush.CreateSolidBrush(RGB(255, 255, 102));//设置背景颜色为黄色。编译运行函数即可。
2.MFC如何设置背景图片
首先在网上下载一张Bitmap的图片,放在res文件夹下
接着在OnInitDialog()后面加上如下代码
CString strBmpPath = _T(".\\res\\backgroundone.jpg"); CImage img; img.Load(strBmpPath); MoveWindow(0, 0, img.GetWidth(), img.GetHeight()); CBitmap bmpTmp; bmpTmp.Attach(img.Detach()); m_brush.CreatePatternBrush(&bmpTmp);
创建一个新工程,可以什么都不加。打开.rc, 创建或打开Icon资源(以下都以Icon为例)。
单击工程窗口的资源视图标签,选中资源ID为IDR_MAINFRAME图标资源,然后按Delete键把它删除掉,当然也可以不删,具体后面会讲到。
从资源菜单中选择Resource,然后选择Icon,添加资源,选中Icon类型,点击导入,此时会叫你选择本地的图片,记住必须选择.ioc格式的图片,否则导入失败。
把新图标的资源ID改为IDI_ICON(也可以不改)。 具体做法如下:
有一点很重要,你改知道就是 打开Header Files下的Resource.h,找到Icon下的图标,系统默认是从128开始的,
#define IDR_MAINFRAME 128
#define IDR_ICONTETYPE 129(单/多文档程序的文档图标)
#define IDI_ICON1 130
#define IDI_ICON2 131
a.修改exe文件图标
VS2010生成的exe文件图标是用Icon下几个图标中value值最小的,顺序为IDR_MAINFRAME、IDR_ICONTETYPE、新加 的,所以想更改生成的exe文件图标,只要保证图标的value值是Icon下几个图标中最小的就可以了
1. 导入自己的.ioc图片,并在Resource.h中,将自己加的icon资源Value改为最小,如下,因此不一定要删除IDR_MAINFRAME
#define IDR_MAINFRAME 129
#define IDI_ICON1 128(自己添加的icon)
2. 然后编译运行,找到你的debug目录,你将看到图标已经更改的.exe执行文件,这种方法可以将任何你喜欢的图片做成.exe文件图标
b.修改标题栏图标
1. 如上操作,导入自己喜爱的ico图片,编辑新加icon的ID,比如我新加的Icon资源ID为 IDI_ICON1
22. 基于对话框的程序,在构造函数中有一句
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
此时把IDR_MAINFRAME改为我的IDI_ICON1的图标名。
首先,拖动几个Button到窗口,然后修改Button的Owner Draw属性为true
接着,右击Dialog窗口 --> Class Wizard --> Messages --> WM_DRAWITEM --> Add Handler --> Edit Code


void CMFCInterfaceDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) { // TODO: Add your message handler code here and/or call default //获得button标题 //CString btnCaption = _T("Dialog"); CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC); CString btnCaption = L""; //设置标题 switch (lpDrawItemStruct->CtlID) { case ID1: btnCaption = "1"; break; case ID2: btnCaption = "2"; break; case ID3: btnCaption = "3"; break; default: ; } CRect drawRect; //获得绘图DC //得到原Button的矩形大小 drawRect.CopyRect(&(lpDrawItemStruct->rcItem)); //绘制控件框架 pDC->DrawFrameControl(&drawRect, DFC_BUTTON, lpDrawItemStruct->CtlType); //创建画刷 CBrush pBrush; pBrush.CreateSolidBrush(RGB(100, 130, 10)); //画矩形 pDC->FillRect(drawRect, &pBrush); //定义一个CRect用于绘制文本 CRect textRect; //拷贝矩形区域 textRect.CopyRect(&drawRect); //获得字符串尺寸 CSize sz = pDC->GetTextExtent(btnCaption); //调整文本位置 居中 textRect.top += (textRect.Height() - sz.cy) / 2; //设置文本背景透明 pDC->SetBkMode(TRANSPARENT); //设置文本颜色 pDC->SetTextColor(RGB(0, 0, 255)); //绘制文本内容 pDC->DrawText(btnCaption, &textRect, DT_RIGHT | DT_CENTER | DT_BOTTOM); CDialogEx::OnDrawItem(nIDCtl, lpDrawItemStruct); }
当然,对于不想要改变的Button,将Owner Draw属性设为false就行。
5.static text字体及颜色的绘制
颜色绘制:
在OnCTLColor中


HBRUSH CMFCInterfaceDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { //HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); if (pWnd == this) { return m_brush; } if (pWnd->GetDlgCtrlID() == (IDC_STATIC_TITLE))//IDC_STATIC_TITLE:标题ID { pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(255, 251, 240)); return HBRUSH(GetStockObject(HOLLOW_BRUSH)); } if (pWnd->GetDlgCtrlID() == (IDC_STATIC))//IDC_STATIC:文本ID { pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(0, 225, 225)); return HBRUSH(GetStockObject(HOLLOW_BRUSH)); } return hbr; //return m_brush; }
额外提示:pDC->SetBkMode(TRANSPARENT);是设置文本背景透明。
字体绘制:
首先,在Dlg.h文件中声明Font变量CFont newFont;
然后,在OnInitDialog()函数后面加上以下代码
CFont* font; font = static_title.GetFont();//获取CFont对象 LOGFONT lf; font->GetLogFont(&lf);//获取LOGFONT结构体 lf.lfHeight = -15; //修改字体大小 lf.lfItalic = TRUE; //倾斜 lf.lfWeight = 4