MFC是微软对Win32 API的封装,使用较为简单,但是在美化方面MFC本身就比较欠缺了,单单只是简单的设置一下背景图片这个操作就得需要好多行代码,并且还不能直接使用Png、Jpg等图片,今天小悠就在这里简单的说一下MFC成显示png和jpg等图片的方法.
先看一下绘制的效果吧:
首先说一下程序中需要引入的头文件以及lib库
要想显示Png、Jpg等格式的图片,需要引入微软的GDI+图形设备接口,在你的MFC程序中 导入头文件GdiPlus.h 和库文件 gdiplus.lib就能使用GDI+了,小悠一般是这么做的:
1
2
3
4
|
//包含文件
#include <GdiPlus.h>
//GDI的库
#pragma comment(lib, "gdiplus.lib")
|
其次,在使用GDI+的时候需要初始化GDI+
初始化操作使用函数 GdiplusStartup(
ULONG_PTR* token,
const GdiplusStartupInput* input,
GdiplusStartupOutput* output
);
来完成,其中
参数一:他是一个ULONG_PTR的指针,token这个参数就类
似于一个句柄吧,关闭GDI+的时候需要用到它。
参数二:指针指向一个GdiplusStartupInput结构,其中包
含了GDI+的一些信息。
参数三:指针到一个GdiplusStartupOutput结构,它接收
一些GDI+信息
上面只是简单介绍了这个函数的参数,详细的信息你可以查看MSDN
例如小悠是这个样子初始化GDI+的:
1
2
3
4
|
//就一句话,里面的 两个变量
//ULONG_PTR m_Taken;
// Gdiplus::GdiplusStartupInput m_Input;
Gdiplus::GdiplusStartup(&m_Taken, &m_Input, NULL);
|
为了简单的说明,我们就直接在Onpaint里面完成绘制的全部操作
因为要绘制一张图片,首先我们需要将图片载入内存,然后你还需要知道你需要绘制的目标区域,最后告诉GDI+你的图片的剪切区域,完成绘制就OK了,下面是小悠简单的写的一个操作,在OnPaint里面完成的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
CDialogEx::OnPaint();
//这里简单的绘制一下背景,就省略了一些 复杂的 操作
//获取到DC
CDC* pDC = GetDC();
//你需要绘制的目标
CRect clientRect;
GetClientRect(&clientRect);
//载入你的图片
Gdiplus::Bitmap * lpBmp =Gdiplus::Bitmap::FromFile(_T(
"./bg.jpg"
));;
//绑定你 的DC
Gdiplus::Graphics graph(pDC->m_hDC);
//开始绘制操作
graph.DrawImage(lpBmp,
//目标位置
Gdiplus::Rect(0,0,clientRect.Width(),clientRect.Height()),
//图片的剪切
0,0,lpBmp->GetWidth(),lpBmp->GetHeight(),
Gdiplus::UnitPixel
);
graph.ReleaseHDC(pDC->m_hDC);
delete
lpBmp;
|
最后在对话框的析构函数中要释放GDI+的资源
释放一句话搞定:
1
2
|
if
(m_Taken)
{Gdiplus::GdiplusShutdown(m_Taken);}
|
总结:
总的来说使用GDI+分为下面的几个简单步骤
① 包含对应的头文件,引入GDI+的lib库
② 初始化GDI+
③ 绑定DC完成绘制
④ 释放GDI+