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

被折叠的 条评论
为什么被折叠?



