描述:
我在word里用这个控件,一方面想实现控件的透明,另一方面想在未注册该控件的电脑可以显示控件上的图片,所以我用控件的Picture属性
void CTestCtrlCtrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
m_pic.Render(pdc, rcBounds, rcInvalid); //m_pic是CPictureHolder对象
}
用上面语句可以实现在未注册控件的电脑上显示控件上的图片,但是控件上的图片不是透明的
void CTestCtrlCtrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
if (!pdc)
return;
// TODO: 用您自己的绘图代码替换下面的代码。
//m_pic.Render(pdc, rcBounds, rcInvalid);
//内存DC
CDC MemDC;
MemDC.CreateCompatibleDC(NULL);
//得到图片的宽度和高度
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);
pdc->TransparentBlt(0, 0, rcBounds.right, rcBounds.bottom,
&MemDC, 0, 0, sizeInPix.cx, sizeInPix.cy, RGB(255, 255, 255));
MemDC.SelectObject(pOldBmp);
bmpFace.DeleteObject();
MemDC.DeleteDC();
}
用上面这个方法可以实现控件上图片的透明,但是在未注册电脑上却无法显示该控件
请大家帮忙!
解决方案1:
Make your control windowless.