MFC在SDI中添加背景图片以及改变程序图标的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shufac/article/details/25659093

一、MFCSDI中添加背景图片

选择bmp格式的图片,在资源里导入图片到bitmap里面,IDIDB_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*48pix

如果需要背景图片覆盖整个View类区域,那就添加下面的代码:

CRect rect;
GetClientRect(rect);///取得客户区域
pDC->FillRect(rect,&m_brush); ///用背景画刷填充区域

效果如示意图3所示:

 

示意图3

说明:添加的背景图片实际大小为48*48pix

为了避免背景闪烁,添加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*48pix

两种方法的区别:

运用方法一可以实现在选定的区域覆盖添加的图片,该区域可以大于图片本身;方法二只能够显示实际的位图大小。注:这只是自己的观点,不一定正确,仅供参考。 

 

二、改变程序图标方法


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_MAINFRAME128,自己添加的会大于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);

其他的处理和单文档是一致的。

(完)

展开阅读全文

没有更多推荐了,返回首页