基于Visual Stadio 2017 MFC 对话框背景导入问题
本文仅作学习使用,欢迎各位大佬补充改正。因为MFC已经过于古老,网上关于MFC的部分使用的记录过于久远,所以记录学习下,方便以后翻用,本文使用两种方法导入bitmap文件,然后进行背景设置。
第一种方法 (失真率较高)
1 MFC 资源视图中Bitmap中右键插入一个bitmap文件
2 将图像用window自带的画图软件打开 全选复制后粘贴到刚新建的bitmap中
这里可以看到图像的颜色已经发生了变化
3 在想添加的对话框.cpp文件中的:OnPaint()函数的if else中的else部分删除绘制函数CDialogEx::OnPaint();
然后粘贴下面部分代码,其中IDB_BITMAP1为前面新建的的bitmap的ID。
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect); //获取对话框长宽
CDC dcBmp; //定义并创建一个内存设备环境
dcBmp.CreateCompatibleDC(&dc); //创建兼容性DC
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP1); //载入资源中图片
BITMAP m_bitmap; //图片变量
bmpBackground.GetBitmap(&m_bitmap); //将图片载入位图中
//将位图选入临时内存设备环境
CBitmap *pbmpOld = dcBmp.SelectObject(&bmpBackground);
//调用函数显示图片StretchBlt显示形状可变
dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &dcBmp, 0, 0, m_bitmap.bmWidth, m_bitmap.bmHeight, SRCCOPY);
4 这里直接运行如果报找不到IDB_BITMAP1的错误,需要在这个对话框的头文件中加入#include"resource.h",运行结果为:
第二种方法 (该方法的失真率比上一种方法低)
1 同样新建bitmap文件之后,打开属性页,可以看到filename为**、res\bitmap1.bmp,在项目文件中找到res文件,删除其中的bitmap1.bmp文件,并将你想使用的背景图片存到res文件夹中,重命名为bitmap1.bmp:(这里可以将属性页中的bitmap1.bmp更改亦可,仅需将res文件中的背景图片命名为相应的名字)
2 步骤和上面第一种方法 中的步骤3、4一致,运行结果为下图,这里可以看到虽然依旧不够清晰,但明显失真率没有第一种方法高了: