MFC动态加载图片

【1】拖个控件Picture Control到对话框中

【2】为控件添加一个变量m_picControl

【3】加载图片

复制代码
HBITMAP hBitmap = (HBITMAP)LoadImageA(NULL, "Z:/testProj/res/bitmap2.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
m_picControl.SetBitmap(hBitmap);

【4】问题解决

此时发现无法显示图片,这是因为你没有加载图片的类型,默认是Frame

【5】调整图片大小

复制代码
HDC dc = GetDC()->m_hDC;
HBITMAP hBitmapNew;
TranslateBitmapSize(dc, hBitmap, 140, 140, hBitmapNew, 50, 50);

BOOL TranslateBitmapSize(
	IN HDC hCurScreemDC,	//当前屏幕DC,可通过GetDC获得
	IN HBITMAP hBmpSrc,	//原BITMAP句柄
	IN int nSrcWidth,		//原BITMAP的宽度
	IN int nSrcHeight,		//原BITMAP的高度
	OUT HBITMAP &hBmpDst,	//改变大小后的BITMAP的句柄
	IN int nDstWidth,		//改变大小后的BITMAP的宽度
	IN int nDstHeight		//改变大小后的BITMAP的高度
)
{
	if (hBmpSrc == NULL || hCurScreemDC == NULL)
	{
		return FALSE;
	}
	if (hBmpDst != NULL)
	{
		DeleteObject(hBmpDst);
	}
	HDC hOldSrcDC = NULL;
	HDC hOldDstDC = NULL;
	HDC hSrcDC = CreateCompatibleDC(hCurScreemDC);
	HDC hDstDC = CreateCompatibleDC(hCurScreemDC);
	hBmpDst = CreateCompatibleBitmap(hCurScreemDC, nDstWidth, nDstHeight);
	hOldSrcDC = (HDC)SelectObject(hSrcDC, hBmpSrc);
	hOldDstDC = (HDC)SelectObject(hDstDC, hBmpDst);
	StretchBlt(hDstDC, 0, 0, nDstWidth, nDstHeight, hSrcDC, 0, 0, nSrcWidth, nSrcHeight, SRCCOPY);
	SelectObject(hSrcDC, hOldSrcDC);
	SelectObject(hDstDC, hOldDstDC);
	DeleteObject(hSrcDC);
	DeleteObject(hDstDC);
	return TRUE;
}
相关推荐
安全二次方security²10 小时前
CUDA C++编程指南(7.25)——C++语言扩展之DPX
c++·人工智能·nvidia·cuda·dpx·cuda c++编程指南
爱装代码的小瓶子10 小时前
【c++与Linux基础】文件篇(4)虚拟文件系统VFS
linux·开发语言·c++
疯狂的喵15 小时前
C++编译期多态实现
开发语言·c++·算法
2301_7657031415 小时前
C++中的协程编程
开发语言·c++·算法
m0_7487080515 小时前
实时数据压缩库
开发语言·c++·算法
小魏每天都学习16 小时前
【算法——c/c++]
c语言·c++·算法
m0_7482331717 小时前
30秒掌握C++核心精髓
开发语言·c++
风清扬_jd17 小时前
libtorrent-rasterbar-2.0.11编译说明
c++·windows·p2p
u01092727117 小时前
C++中的RAII技术深入
开发语言·c++·算法
彷徨而立18 小时前
【C/C++】strerror、GetLastError 和 errno 的含义和区别?
c语言·c++