本文出自 悠然品鉴 小悠原创,转载请务必注明出处:http://www.youranshare.com/codeorg/sid/129.html
MFC是微软对Win32 API的封装,使用较为简单,但是在美化方面MFC本身就比较欠缺了,单单只是简单的设置一下背景图片这个操作就得需要好多行代码,并且还不能直接使用Png、Jpg等图片,今天小悠就在这里简单的说一下MFC成显示png和jpg等图片的方法.
先看一下绘制的效果吧:
要想显示Png、Jpg等格式的图片,需要引入微软的GDI+图形设备接口,在你的MFC程序中 导入头文件GdiPlus.h 和库文件 gdiplus.lib就能使用GDI+了,小悠一般是这么做的:
//包含文件 #include <GdiPlus.h> //GDI的库 #pragma comment(lib, "gdiplus.lib")
初始化操作使用函数 GdiplusStartup(
ULONG_PTR* token,
const GdiplusStartupInput* input,
GdiplusStartupOutput* output
);
来完成,其中
参数一:他是一个ULONG_PTR的指针,token这个参数就类
似于一个句柄吧,关闭GDI+的时候需要用到它。
参数二:指针指向一个GdiplusStartupInput结构,其中包
含了GDI+的一些信息。
参数三:指针到一个GdiplusStartupOutput结构,它接收
一些GDI+信息
上面只是简单介绍了这个函数的参数,详细的信息你可以查看MSDN
例如小悠是这个样子初始化GDI+的:
//就一句话,里面的 两个变量 //ULONG_PTR m_Taken; // Gdiplus::GdiplusStartupInput m_Input; Gdiplus::GdiplusStartup(&m_Taken, &m_Input, NULL);
因为要绘制一张图片,首先我们需要将图片载入内存,然后你还需要知道你需要绘制的目标区域,最后告诉GDI+你的图片的剪切区域,完成绘制就OK了,下面是小悠简单的写的一个操作,在OnPaint里面完成的:
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;
释放一句话搞定:
if(m_Taken) {Gdiplus::GdiplusShutdown(m_Taken);}
总的来说使用GDI+分为下面的几个简单步骤
① 包含对应的头文件,引入GDI+的lib库
② 初始化GDI+
③ 绑定DC完成绘制
④ 释放GDI+
下面附上小悠本文中的示例工程:
解压密码 yscode
百度网盘下载 http://pan.baidu.com/s/1qWsd1Dy