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;
}
相关推荐
li1670902703 分钟前
第二十五章:C++11(下)
c语言·开发语言·数据结构·c++
承渊政道3 分钟前
【动态规划算法】(回文串问题解题框架与经典案例)
数据结构·c++·学习·算法·leetcode·动态规划·哈希算法
AI进化营-智能译站7 分钟前
ROS2 C++开发系列11-VS Code一键生成Doxygen注释|让ROS2节点文档自动跟上代码迭代
java·数据库·c++·ai
zhouwy1131 小时前
Linux文件系统与IO编程
linux·c++
王老师青少年编程9 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮10 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
样例过了就是过了11 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
谭欣辰11 小时前
C++ 排列组合完整指南
开发语言·c++·算法
橙子也要努力变强12 小时前
信号捕捉底层机制-机理篇2
linux·服务器·c++
盐焗鹌鹑蛋12 小时前
【C++】stack和queue类
c++