一、MFC在SDI中添加背景图片
选择bmp格式的图片,在资源里导入图片到bitmap里面,ID为IDB_BITMAP_DLGBK;
示意图一图背景图片48*48
两种方法实现:
方法一:
在C**View类头文件添加画刷的声明: CBrush m_brush;
在C**View构造函数中加入代码:
CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP_DLGBK); ///加载位图 m_brush.CreatePatternBrush(&bmp); ///创建位图画刷
接着在OnDraw函数中画出来:
//右侧背景
/CRect rect_BK(rect.Width()*2/3+2,51,rect.Width(),400); GetClientRect(rect_BK);///取得View中选定的区域 pDC->FillRect(rect_BK,&m_brush); ///用背景画刷填充区域
效果如示意图2所示:
示意图2
说明:添加的背景图片实际大小为48*48(pix)
如果需要背景图片覆盖整个View类区域,那就添加下面的代码:
CRect rect; GetClientRect(rect);///取得客户区域 pDC->FillRect(rect,&m_brush); ///用背景画刷填充区域
效果如示意图3所示:
示意图3
说明:添加的背景图片实际大小为48*48(pix)
为了避免背景闪烁,添加WM_ERASEBKGND消息处理函数:
BOOL CTestView::OnEraseBkgnd(CDC* pDC) { CView::OnEraseBkgnd(pDC); return TRUE; }
方法二:
在C**View头文件添加画刷的声明:CBitmap *m_bitmap;
在C**View构造函数中添加下面的代码
m_bitmap =new CBitmap; m_bitmap->LoadBitmap(IDB_BITMAP1);然后:
CMyView::OnEraseBkgnd(CDC* pDC) { CView::OnEraseBkgnd(pDC); CDC dcMem; CClientDC dc(this); HBITMAP hbit; dcMem.CreateCompatibleDC(&dc); hbit = (HBITMAP)dcMem.SelectObject(m_bitmap); CRect rect; GetClientRect(rect); GetDC()->BitBlt(rect.Width()*2/3+5,51,rect.Width()/3,300,&dcMem,0,0,SRCCOPY); return TRUE; }
效果如示意图4所示:
示意图4
说明:红色选中的区域为显示的背景图片,该图片的实际大小为:48*48(pix)
两种方法的区别:
运用方法一可以实现在选定的区域覆盖添加的图片,该区域可以大于图片本身;方法二只能够显示实际的位图大小。注:这只是自己的观点,不一定正确,仅供参考。
二、改变程序图标方法
1.单文档应用程序更改exe文件图标
如示意图3所示,标题:“俄罗斯方块”前面的图标是MFC系统自带的一个图标,现对其进行替换。
首先需要准备好代替换的图标资源。在资源视图中导入该图标,ID号为IDI_ICON_APP:
在CMainFrame中的OnCreate()函数中添加如下代码:
//添加应用程序标题图标
HICON m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON_APP); SetIcon(m_hIcon,TRUE); SetIcon(m_hIcon,FALSE);
运行后界面效果如示意图5红色标识区所示
示意图5
这样,界面中的图标已经该更改完成,但是这样只能更改打开程序时左上角的图标和任务栏里图标,不能更改生成的exe文件的图标。要更改图标从resourceview栏,在 resource.h中打开之后可以看到各个资源的ID值,一般mfc自动生成的IDR_MAINFRAME是128,自己添加的会大于128,顺序后延,编译时默认将ID最小的作为exe的图标,所以只要我们将其改之就可以了,还是上面的对话框,将IDI_ICON3改为128,将 IDR_MAINFRAME改为其他的大一点的数不能太大了,因为可能会有其他用处,就改为130(这里主要还是新添加的icon资源ID值要求比128要小即可),然后重新rebuild,这时就可以看到exe图标变成了自己的IDI_ICON_APP的图标了。
在resource.h中
#define IDR_MAINFRAME 128 ** ** ** #define IDI_ICON_APP 313
将 #define IDI_ICON_APP 改为127(本例中127为空闲且比128小)
生成的exe文件图标如示意图6所示:
示意图6
以上是单文档应用程序更改图标的方法,下面也顺便说一下对话框中实现这种效果的方法。
2.对话框应用程序更改exe文件图标
对话框应用程序处理这种效果是一致的,只不过加载图片是在对话框构造函数中,在对话框构造函数中添加代码:
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON_APP);
其他的处理和单文档是一致的。
(完)