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;
}
相关推荐
码力码力我爱你20 小时前
Harmony OS C++实战
开发语言·c++
Vect__20 小时前
别再只懂 C++98!C++11 这7个核心特性,直接拉开你与普通开发者的差距
c++
想唱rap20 小时前
C++ map和set
linux·运维·服务器·开发语言·c++·算法
小欣加油21 小时前
leetcode 1018 可被5整除的二进制前缀
数据结构·c++·算法·leetcode·职场和发展
玖剹1 天前
递归练习题(四)
c语言·数据结构·c++·算法·leetcode·深度优先·深度优先遍历
西部秋虫1 天前
YOLO 训练车牌定位模型 + OpenCV C++ 部署完整步骤
c++·python·yolo·车牌识别
雾岛听蓝1 天前
C++ 类和对象(一):从概念到实践,吃透类的核心基础
开发语言·c++·经验分享·笔记
Dream it possible!1 天前
LeetCode 面试经典 150_图_克隆图(90_133_C++_中等)(深度优先:DFS)
c++·leetcode·面试·
鸭子程序员1 天前
c++ 算法
开发语言·c++·算法
不会c嘎嘎1 天前
算法百练,直击OFFER -- day5
c++·算法