您的位置:首页 > 其它

MFC对话框显示图片(使用Picture控件)

2016-04-12 16:01 507 查看
//**************************************************************************************************************
// 方法说明:    显示JPG和GIF、BMP图片
// 参数说明:    CDC * pDC           设备环境对象
// 参数说明:    CString strPath     要显示的图片路径
// 参数说明:    int x               要显示的X位置
// 参数说明:    int y               要显示的Y位置
// 返回值:      BOOL                成功返回TRUE,否则返回FALSE
//**************************************************************************************************************
BOOL CSIFTDlg::ShowImage(CDC* pDC, CString strPath, int x, int y)
{

IPicture *pPic = NULL;
OleLoadPicturePath(CComBSTR(strPath.GetBuffer()), (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);

// 将图像宽度和高度单位转化为像素单位
//#define HIMETRIC_PER_INCH 2540
//int nPicWidth =  MulDiv(hmWidth, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSX),2540);
//int nPicHeight = MulDiv(hmHeight, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY),2540);

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

if (FAILED(pPic->Render(*pDC, x, y, iWndWidth, iWndHeight, 0, hmHeight, hmWidth, -hmHeight, NULL)))
{
pPic->Release();
return false;
}

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

return true;
}


//**************************************************************************************************************
// 方法说明:    显示图片(按钮点击响应)
// 返回值:      void
//**************************************************************************************************************
void CSIFTDlg::OnBnClickedDisplay()
{
CDC *pDC = NULL;
CString strPath;

//设置静态控件的样式,使其可以使用位图,并使位图显示居中
((CStatic*)GetDlgItem(ID_IMG1))->ModifyStyle(0xF, SS_BITMAP | SS_CENTERIMAGE);

pDC = GetDlgItem(ID_IMG1)->GetDC();
strPath = CString(_T(ImgPath1));
ShowImage(pDC, strPath, 0, 0);

ReleaseDC(pDC); // 记得释放资源,不然会导致内存泄露
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: