VS2010 MFC GDI+ 实现PNG透明图片显示

时间:2023-03-09 15:17:22
VS2010 MFC GDI+ 实现PNG透明图片显示

网上找了一些资料学习了一下PNG图的显示,这里总结一下。

参考:http://blog.****.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了半天,上图。

VS2010 MFC GDI+ 实现PNG透明图片显示

最后,最关键的,工程在此:http://pan.baidu.com/s/1qWxAl7Q