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;
}
相关推荐
CodeByV2 小时前
【C++】继承
开发语言·c++
乱舞八重击(junluoyu)3 小时前
1.PagedAtteion算法
c++
2301_803554523 小时前
C++ 锁类型大全详解
开发语言·c++
曼巴UE53 小时前
UE5 C++ Slate 画曲线
开发语言·c++·ue5
ue星空4 小时前
UE5C++UKismetMathLibrary源代码
c++·ue5
minji...4 小时前
C++ 面向对象三大特性之一---多态
开发语言·c++
2401_841495644 小时前
【数据结构】基于BF算法的树种病毒检测
java·数据结构·c++·python·算法·字符串·模式匹配
No0d1es5 小时前
2025年 CSP-J1 入门级初赛 C++真题
开发语言·c++·青少年编程·csp·信息学奥赛·初赛
橙子也要努力变强5 小时前
C++中的多态
c++