网上找了一些资料学习了一下PNG图的显示,这里总结一下。
参考:http://blog.csdn.net/czyt1988/article/details/7965066
一、VS2010配置GDI+
由于VS2010已经自己干了一些活,所以直接添加下面这些就好了。
1.在stdafx.h里加入下面3句话
#pragma comment(lib,"gdiplus.lib")
#include "gdiplus.h"
using namespace Gdiplus;
2.加入一个成员变量
ULONG_PTR m_gdiplusToken;
3.加入初始化代码
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
由于已经加入了using namespace Gdiplus;这句,前面就不用加Gdiplus::了。
4.加入结束回收代码
GdiplusShutdown(m_gdiplusToken);
这里加入一个窗口销毁事件,如下处理加入代码即可。
void CShowPNGDlg::OnDestroy()
{
CDialogEx::OnDestroy();
// TODO: Add your message handler code here
GdiplusShutdown(m_gdiplusToken);
}
5.加入一个按钮,按下按钮显示图片
void CShowPNGDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
Image image(L"logo.png"); //载入指定路径的图像文件
CWnd* pwnd=GetDlgItem(IDC_STATIC_PIC);
CDC* dc=pwnd->GetDC(); //获取图像控件的设备上下文
CRect rect;
pwnd->GetClientRect(&rect); //获取客户区域的信息
Graphics graph(dc->GetSafeHdc());
graph.DrawImage(&image,0,0,rect.Width(),rect.Height());
//在指定图像控件的区域中绘制图像
// 函数 DrawImage()的第 1 个参数为存放图像数据的内存地址
// 第 2 个参数和第 3 个参数是绘制的起点坐标
// 第 4 个参数和第 5 个参数是指定的宽度和高度
ReleaseDC(dc); //释放资源
}
这里记得添加一个图片显示控件或者一个标签控件,设置其ID为IDC_STATIC_PIC,用于显示图片。
二、大功告成,在试试下面几个修改:
1.直接把按钮响应里的代码放到OnInitDialog()里面,跟着初始化后面写,看看还能不能显示,这里我不解,我想应该是显示机制的问题,再加入刷新代码的话应该就可以了。
2.图片显示的格式,换成其他的,比如jpg等,试试看。
BB了半天,上图。
最后,最关键的,工程在此:http://pan.baidu.com/s/1qWxAl7Q