描述:
我昨晚在QQ里请教你关于由IPictureDisp得到IPicture的问题
有如下语句你帮我看下:
//显示位图
bool CWordActiveXCtrl::DrawStamp(CDC* pdc, IPicture* pic, const CRect& rcBounds)
{
//内存DC
CDC MemDC;
MemDC.CreateCompatibleDC(NULL);
//得到图片的宽度和高度
long lWidth, lHeight;
pic->get_Width(&lWidth);
pic->get_Height(&lHeight);
// Calculate Its Size On a "Standard" (96 DPI) Device Context
lWidth = MulDiv(lWidth, 96, HIMETRIC_INCH);
lHeight = MulDiv(lHeight, 96, HIMETRIC_INCH);
CBitmap bmpFace;
bmpFace.CreateCompatibleBitmap(pdc, lWidth, lHeight);
//将这幅图片选入内存DC
CBitmap* pOldBmp = MemDC.SelectObject(&bmpFace);
pic->Render(MemDC.GetSafeHdc(), 0, 0, lWidth, lHeight, 0, 0, lWidth, lHeight, 0);
pdc->TransparentBlt(0, 0, rcBounds.right, rcBounds.bottom,
&MemDC, 0, 0, lWidth, lHeight, RGB(255, 255, 255));
MemDC.SelectObject(pOldBmp);
bmpFace.DeleteObject();
MemDC.DeleteDC();
return true;
}
OnDraw()函数如下:
void CWordActiveXCtrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
IPictureDisp* pdisp = m_pic.GetPictureDispatch();
IPicture* pic;
pdisp->QueryInterface(IID_IPicture, (void**)&pic);
DrawStamp(pdc, pic, rcBounds);
}
但是在word里效果没办法显示出来,请教你上面显示位图的函数是不是那样写?
解决方案1:
我测试了一下我的,在没有注册控件的时候,打开是以图片的形式打开的,也是透明的。只是没有了右键菜单.所有的功能也没有了。
你说的有问题,你跟踪一下CreateCompatibleDC,我发现这个函数有时会失败,让我很不理解。