MFC对话框项目,给对话框插入背景图

近期在做一个MFC的项目工程,MFC对话框的搭建基本已经完成,现在要求给对话框加上背景图片,上网查找了一些方法,最后实现了这个功能,现在对实现过程中采用的方法及过程进行一个总结。

首先,在头文件中包含一个新的头文件

#include <gdiplus.h>

然后再*Dlg.h中添加命名空间,注意这个命名空间在类定义的外部添加

using namespace Gdiplus;

然后在Dlg类的定义中添加下面的变量定义

GdiplusStartupInput m_GdiplusStarupInput;

Gdiplus::Image* m_img;//这里的Gdiplus::也可以不加,因为前面已经定义了命名空间了

在Dlg.cpp中包含使用的库文件

#pragma comment(lib,"gdiplus.lib")

在构造函数中添加下面的语句

GdiplusStartup(&m_uGdiplusToken, &m_GdiplusStarupInput, nullptr);

在析构函数中添加下面的语句

GdiplusShutdown(m_uGdiplusToken);

在Dlg Init方法中导入要加载的图片

char buf[32] = "";
sprintf_s(buf, ".\res\BackPic.jpg");//这里使用的是相对路径,建议使用相对路径,这样可执行文件在别的路径中打开时,只要相对路径下有图片资源就可以成功

//加载图片,否则执行exe文件,图片不能显示出来

CStringW s; //转为宽字符
s = buf;
m_img = Gdiplus::Image::FromFile(s); //加载图片,加断点调试,若图片加载成功则m_img不为空

最后在Onpaint函数中添加下面的代码

else//else前面的代码不用修改,只修改else语句中的内容
{
//CDialogEx::OnPaint();
CPaintDC dc(this);
CRect rect = { 0 };
GetClientRect(&rect); //获取客户区大小
Graphics g(dc);
g.DrawImage(m_img, 0, 0, rect.Width(), rect.Height());

}

至此图片加载的整个代码流程就结束了,这是我背景图的一部分,图片是根据对话框的尺寸进行了拉伸,图片的清晰度降低了

 我参考了CSDN的两个资源,链接如下:

https://blog.csdn.net/qq_18297675/article/details/58661363

https://blog.csdn.net/qq_18297675/article/details/51050184

这位仁兄提出了三种方法,我都尝试了一下,一三没问题,方法二没实现,原因还没找到

原文地址:https://www.cnblogs.com/KeepThreeMunites/p/13370067.html