MFC(C++)对话框里显示图片

效果展示

在这里插入图片描述
在这里插入图片描述

操作

文件操作

将需要用到的图片放到合适位置(没有指定位置,只要你找得到就行)
这里我放在项目下的res文件夹里

接下来我们把图片导入到项目的资源文件里
有两种导入方法

  1. 第一种
    在这里插入图片描述
    资源视图找到.rc文件夹右键点击添加资源
    如果有Bitmap文件夹在.rc文件夹或Bitmap文件夹右键添加皆可
    在这里插入图片描述

在这里插入图片描述
选择Bitmap然后点击导入
在这里插入图片描述
选择我们需要的图片(这里可能出错,具体请参考注意事项1)
成功导入后记得Ctrl+S保存

  1. 第二种
    在这里插入图片描述
    解决方案里找到资源文件里的.rc资源,右键查看代码
    然后在合适的位置手动添加\修改资源(有注意事项)2
    在这里插入图片描述
    在这里插入图片描述

控件(图片)ID 控件(图片)类型 资源相对位置
新手找不到合适位置还是老老实实用第一个方法添加
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

随后在Resource.h里找一个不重复的数加上去

代码操作

首先得有对话框废话
这里跳过创建对话框
我们来到对话框的头文件
在这里插入图片描述
声明绘图函数

afx_msg void OnPaint();

随后来到cpp里
在这里插入图片描述
在消息响应里添加绘图响应

ON_WM_PAINT()

然后在cpp里创建OnPaint的定义

//防憨憨全搬发现不对,这里CmfcTestDlg是你自己的对话框类
void CmfcTestDlg::OnPaint()
{
	CPaintDC dc(this);// 用于绘制的设备上下文
	CDC memDC;// 创建一个内存 DC,并选择 Bitmap
	memDC.CreateCompatibleDC(&dc);// 创建与窗口 DC 兼容的内存 DC
	CBitmap bmp;
	bmp.LoadBitmap(IDB_BITMAP1);// 加载 .bmp 图片
	BITMAP bm;
	bmp.GetBitmap(&bm);// 获取 Bitmap 的尺寸
	CBitmap* pOldBitmap = memDC.SelectObject(&bmp);
	dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY);// 绘制 Bitmap
	memDC.SelectObject(pOldBitmap);// 恢复原 Bitmap
	CDialogEx::OnPaint();
}

BitBlt的前四个参数为对话框内放的位置和图片显示大小
显示多个图片也行

//防憨憨全搬发现不对,这里CmfcTestDlg是你自己的对话框类
void CmfcTestDlg::OnPaint()
{
	CPaintDC dc(this);
	CDC memDC;
	memDC.CreateCompatibleDC(&dc);
	CBitmap bmp0,bmp1;
	bmp0.LoadBitmap(IDB_BITMAP1);
	bmp1.LoadBitmap(IDB_BITMAP2);
	BITMAP bm0,bm1;
	bmp0.GetBitmap(&bm0);
	bmp1.GetBitmap(&bm1);
	CBitmap* pOldBitmap0 = memDC.SelectObject(&bmp0);
	dc.BitBlt(0, 0, bm0.bmWidth, bm0.bmHeight, &memDC, 0, 0, SRCCOPY);
	memDC.SelectObject(pOldBitmap0);
	CBitmap* pOldBitmap1 = memDC.SelectObject(&bmp1);
	dc.BitBlt(500, 0, bm1.bmWidth, bm1.bmHeight, &memDC, 0, 0, SRCCOPY);
	memDC.SelectObject(pOldBitmap1);
	CDialogEx::OnPaint();
}

有注意事项3

注意事项


  1. 这里选择图片一定要是bmp格式,且初始就为bmp格式,不能直接将后缀改为bmp。例如1.jpg/1.png->1.bmp
    这样会导致vs报错error RC2170 : bitmap file xxx.bmp is not in 3.00 format
    在这里插入图片描述
    正确的做法:
    在这里插入图片描述
    找到我们需要的图片,右键使用画图等工具(这里亲测微软自带的画图软件可以修改)打开编辑
    在这里插入图片描述
    将图片另存为BMP图片即可。 ↩︎

  2. 手动在.rc里添加资源不会在Resource.h里自动加控件宏定义,得手动去添加一个没有用到的数。自动添加资源可能会在Resource.h出现两个控件宏用一个ID,都注意并手动修改。 ↩︎

  3. 这里必须先恢复Bitmap
    CBitmap* pOldBitmap0 = memDC.SelectObject(&bmp0);
    dc.BitBlt(0, 0, bm0.bmWidth, bm0.bmHeight, &memDC, 0, 0, SRCCOPY);
    memDC.SelectObject(pOldBitmap0);
    CBitmap* pOldBitmap1 = memDC.SelectObject(&bmp1);
    dc.BitBlt(500, 0, bm1.bmWidth, bm1.bmHeight, &memDC, 0, 0, SRCCOPY);
    memDC.SelectObject(pOldBitmap1);
    不能写成
    CBitmap* pOldBitmap0 = memDC.SelectObject(&bmp0);
    CBitmap* pOldBitmap1 = memDC.SelectObject(&bmp1);
    dc.BitBlt(0, 0, bm0.bmWidth, bm0.bmHeight, &memDC, 0, 0, SRCCOPY);
    dc.BitBlt(500, 0, bm1.bmWidth, bm1.bmHeight, &memDC, 0, 0, SRCCOPY);
    memDC.SelectObject(pOldBitmap0);
    memDC.SelectObject(pOldBitmap1); ↩︎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值