MFC在SDI中添加背景图片以及改变程序图标的方法 缺乏、安全感 2022-08-27 05:41 264阅读 0赞 **一、MFC在SDI中添加背景图片** 选择bmp格式的图片,在资源里导入图片到bitmap里面,ID为IDB\_BITMAP\_DLGBK; ![Center][] 示意图一图背景图片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所示: ![Center 1][] 示意图2 说明:添加的背景图片实际大小为48\*48(pix) 如果需要背景图片覆盖整个View类区域,那就添加下面的代码: CRect rect; GetClientRect(rect);///取得客户区域 pDC->FillRect(rect,&m_brush); ///用背景画刷填充区域 效果如示意图3所示: ![Center 2][] 示意图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所示: ![Center 3][] 示意图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红色标识区所示 ![Image 1][]![Center 4][] 示意图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所示: ![Center 5][] 示意图6 以上是单文档应用程序更改图标的方法,下面也顺便说一下对话框中实现这种效果的方法。 **2.对话框应用程序更改exe文件图标** 对话框应用程序处理这种效果是一致的,只不过加载图片是在对话框构造函数中,在对话框构造函数中添加代码: m\_hIcon = AfxGetApp()->LoadIcon(IDI\_ICON\_APP); 其他的处理和单文档是一致的。 (完) [Center]: /images/20220824/10d0c045482840d4974ffb1146f1fc37.png [Center 1]: /images/20220824/c7222b20c42e46b9bb0ab8404225dba0.png [Center 2]: /images/20220824/efe1b2b5cdf840c8a640e163aa8bc376.png [Center 3]: /images/20220824/1f4a1a07881d434cb3c9e622c7e139d2.png [Image 1]: [Center 4]: /images/20220824/c39dbfe6e1cf46b7a9fe5aed3ddfa6f4.png [Center 5]: /images/20220824/3c7ac2ae5b9d4845bd134bc22858437e.png
还没有评论,来说两句吧...