MFC picture control 显示不同格式图片

本文介绍了一种在MFC对话框中使用OLE技术加载并显示图片的方法。通过修改静态控件样式并利用IPicture接口,可以实现图片的加载与自适应显示。文中还提供了完整的代码实现及效果展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上代码:

添加一个picture control,将ID改为IDC_STATIC_IMAGE,方便查看调用。

BOOL CVQMTDlg::ShowImage()
{
	(CStatic*)GetDlgItem(IDC_STATIC_IMAGE)->ModifyStyle(0xF, SS_BITMAP | SS_CENTERIMAGE);

	CDC *pDc = NULL;
	pDc = GetDlgItem(IDC_STATIC_IMAGE)->GetDC();

	IPicture *pPic = NULL;
	OleLoadPicturePath(CComBSTR(m_sfiles[m_curImagePos].c_str()), (LPUNKNOWN)NULL, 0, 0, IID_IPicture, (LPVOID*)&pPic);

	if (NULL == pPic)
	{
		return FALSE;
	}

	// 获取图像宽和高,注意这里的宽和高不是图像的分辨率  
	OLE_XSIZE_HIMETRIC hmWidth;
	OLE_YSIZE_HIMETRIC hmHeight;
	pPic->get_Width(&hmWidth);
	pPic->get_Height(&hmHeight);

	// 获取显示图片窗口的宽度和高度  
	RECT rtWnd;
	pDc->GetWindow()->GetWindowRect(&rtWnd);
	int iWndWidth = rtWnd.right - rtWnd.left;
	int iWndHeight = rtWnd.bottom - rtWnd.top;

	if (FAILED(pPic->Render(*pDc, 0, 0, iWndWidth, iWndHeight, 0, hmHeight, hmWidth, -hmHeight, NULL)))
	{
		pPic->Release();


		return false;
	}

	//记得释放资源,不然会导致内存泄露  
	pPic->Release();

	return true;
}

效果图:


这样就完美的切合了


参考一:http://blog.youkuaiyun.com/dafenqie/article/details/53337282

参考二:http://www.cnblogs.com/Forever-Road/p/6800838.html?utm_source=itdadao&utm_medium=referral

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值