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;
}
相关推荐
clint4563 天前
C++进阶(1)——前景提要
c++
夜悊3 天前
C++代码示例:进制数简单生成工具
c++
郝学胜_神的一滴3 天前
CMake 021: IF 条件判据详诠
c++·cmake
_wyt0014 天前
洛谷 B3930 [GESP202312 五级] 烹饪问题 题解
c++·gesp
玖玥拾4 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
один but you4 天前
constexpr函数
c++
凡人叶枫4 天前
Effective C++ 条款41:了解隐式接口和编译期多态
java·开发语言·c++·effective c++
凡人叶枫4 天前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++
小胖xiaopangss4 天前
BRpc使用
c++·rpc
-森屿安年-4 天前
63. 不同路径 II
c++·算法·动态规划