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
这位仁兄提出了三种方法,我都尝试了一下,一三没问题,方法二没实现,原因还没找到