一个最难的问题—关于ActiveX控件背景色透明的问题

sea_turtle 2007-03-09 01:39:08
最近做一个设计,需要在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);
}

画出来的是花的。

...全文
696 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sea_turtle 2007-03-15
  • 打赏
  • 举报
回复
能实现这个功能也可以。

让嵌入WORD的ActiveX控件可移动、并且透明
mick110 2007-03-09
  • 打赏
  • 举报
回复
如果想要动态刷新背景,我现在找到的最好办法就是取得子窗口下面的背景的DC,然后自己刷到自己的DC上来。
简而言之,就是用动态读取父窗口的背景,用来作子窗口背景,看起来就是透明的了。
sea_turtle 2007-03-09
  • 打赏
  • 举报
回复
使用Application.ScreenUpdating 进行刷新 好象一点效果都没的呢 。。。
sea_turtle 2007-03-09
  • 打赏
  • 举报
回复
我使用InvalidateControl()还是不行呢。。。。
mick110 2007-03-09
  • 打赏
  • 举报
回复
画完后刷新下控件
sea_turtle 2007-03-09
  • 打赏
  • 举报
回复
在form下面测试是没的问题
但是一放到word里面去过后就有问题了
最大化或者最小化过后显示的图象就有桌面或者其他的背景色。
xiangfly 2007-03-09
  • 打赏
  • 举报
回复
不会吧,我现在正在这样用的,没问题呀
sea_turtle 2007-03-09
  • 打赏
  • 举报
回复
是不行的。。
试过了哈
我现在都找了一周的资料了。。。
xiangfly 2007-03-09
  • 打赏
  • 举报
回复
try:

pdc->SetBkMode(TRANSPARENT);
sea_turtle 2007-03-09
  • 打赏
  • 举报
回复
寻求相关技术合作。。。
愿意以其他模块代码交换。。

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧