描述:
最近做一个设计,需要在word里面添加一个activex控件 使用AddOleControl方法添加进去,
目前主要的问题是背景色不是透明的,总是把文字给遮住了
我的代码如下:
bool CWordCertOcxCtrl::DrawStamp(CDC *pdc, IPicture *pic, const CRect &rcBounds)
{
//内存DC
if (!pdc)
return true;
// TODO: 用您自己的绘图代码替换下面的代码。
//m_pic.Render(pdc, rcBounds, rcInvalid);
//内存DC
CDC MemDC;
MemDC.CreateCompatibleDC(GetDC(NULL,OLEDC_NODRAW));
//得到图片的宽度和高度
SIZE sizeInHiMetric, sizeInPix;
m_pic.m_pPict->get_Width(&sizeInHiMetric.cx);
m_pic.m_pPict->get_Height(&sizeInHiMetric.cy);
// Calculate Its Size On a “Standard“ (96 DPI) Device Context
sizeInPix.cx = MulDiv(sizeInHiMetric.cx, 96, HIMETRIC_INCH);
sizeInPix.cy = MulDiv(sizeInHiMetric.cy, 96, HIMETRIC_INCH);
CBitmap bmpFace;
bmpFace.CreateCompatibleBitmap(pdc, sizeInPix.cx, sizeInPix.cy);
//将这幅图片选入内存DC
CBitmap* pOldBmp = MemDC.SelectObject(&bmpFace);
m_pic.m_pPict->Render(MemDC.GetSafeHdc(), 0, 0, rcBounds.right, rcBounds.bottom,
0, sizeInHiMetric.cy, sizeInHiMetric.cx, -sizeInHiMetric.cy, &rcBounds);
TransparentBlt(pdc->m_hDC,0, 0, rcBounds.right, rcBounds.bottom,
MemDC.m_hDC, 0, 0, sizeInPix.cx, sizeInPix.cy, RGB(0, 0, 0));
MemDC.SelectObject(pOldBmp);
bmpFace.DeleteObject();
MemDC.DeleteDC();
return true;
}
void CWordCertOcxCtrl::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);
}
画出来的是花的。