ATL中的IPictureDisp和IPicture的互相转换以及IPicture的绘图

在ATL的项目中的控件类中的OnDraw函数中进行绘图操作,以下代码在OnDraw函数中实现:

RECT& rc = *(RECT*)di.prcBounds;
CComPtr<IPictureDisp> m_picdisp = NULL;//IPictureDisp对象指针
_bstr_t m_bstrImgUrl = "C:\\桌面\\1.bmp";//bmp图片格式的路径
HRESULT hr = NOERROR;
PICTDESC pictDesc;
pictDesc.picType = PICTYPE_BITMAP;
pictDesc.bmp.hbitmap = (HBITMAP)::LoadImage(NULL, m_bstrImgUrl, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);//加载bmp格式的图片
pictDesc.bmp.hpal = nullptr;
pictDesc.cbSizeofstruct = sizeof(PICTDESC);
if(!SUCCEEDED(hr = OleCreatePictureIndirect(&pictDesc, IID_IPictureDisp, TRUE, (LPVOID*)&m_picdisp)))//将图片对象转换为IPictureDisp对象
{
	return S_FALSE;
}
CComPtr<IPicture> pIPic = NULL;
DWORD dwAttr;
if (SUCCEEDED(hr = m_picdisp->QueryInterface(IID_IPicture, (LPVOID*)&pIPic)))//将IPictureDisp对象转换为IPicture对象
{
	pIPic->get_Attributes(&dwAttr);
	if (dwAttr == S_OK)
	{
		OLE_XSIZE_HIMETRIC hmWidth;
		OLE_XSIZE_HIMETRIC hmHeight;
		pIPic->get_Width(&hmWidth);//获取图像的宽度
		pIPic->get_Height(&hmHeight);//获取图像的高度
        //利用IPicture对象进行绘图
		pIPic->Render(di.hdcDraw,
			rc.left,
			rc.top,
			rc.right - rc.left,
			rc.bottom - rc.top,
			0,
			hmHeight,
			hmWidth,
			-hmHeight,
			&rc);
	}
}
return S_OK;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值