目前主要的问题是背景色不是透明的,总是把文字给遮住了
我的代码如下:
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);
}
画出来的是花的。
10 个解决方案
#1
寻求相关技术合作。。。
愿意以其他模块代码交换。。
愿意以其他模块代码交换。。
#2
try:
pdc->SetBkMode(TRANSPARENT);
pdc->SetBkMode(TRANSPARENT);
#3
是不行的。。
试过了哈
我现在都找了一周的资料了。。。
试过了哈
我现在都找了一周的资料了。。。
#4
不会吧,我现在正在这样用的,没问题呀
#5
在form下面测试是没的问题
但是一放到word里面去过后就有问题了
最大化或者最小化过后显示的图象就有桌面或者其他的背景色。
但是一放到word里面去过后就有问题了
最大化或者最小化过后显示的图象就有桌面或者其他的背景色。
#6
画完后刷新下控件
#7
我使用InvalidateControl()还是不行呢。。。。
#8
使用Application.ScreenUpdating 进行刷新 好象一点效果都没的呢 。。。
#9
如果想要动态刷新背景,我现在找到的最好办法就是取得子窗口下面的背景的DC,然后自己刷到自己的DC上来。
简而言之,就是用动态读取父窗口的背景,用来作子窗口背景,看起来就是透明的了。
简而言之,就是用动态读取父窗口的背景,用来作子窗口背景,看起来就是透明的了。
#10
能实现这个功能也可以。
让嵌入WORD的ActiveX控件可移动、并且透明
让嵌入WORD的ActiveX控件可移动、并且透明
#1
寻求相关技术合作。。。
愿意以其他模块代码交换。。
愿意以其他模块代码交换。。
#2
try:
pdc->SetBkMode(TRANSPARENT);
pdc->SetBkMode(TRANSPARENT);
#3
是不行的。。
试过了哈
我现在都找了一周的资料了。。。
试过了哈
我现在都找了一周的资料了。。。
#4
不会吧,我现在正在这样用的,没问题呀
#5
在form下面测试是没的问题
但是一放到word里面去过后就有问题了
最大化或者最小化过后显示的图象就有桌面或者其他的背景色。
但是一放到word里面去过后就有问题了
最大化或者最小化过后显示的图象就有桌面或者其他的背景色。
#6
画完后刷新下控件
#7
我使用InvalidateControl()还是不行呢。。。。
#8
使用Application.ScreenUpdating 进行刷新 好象一点效果都没的呢 。。。
#9
如果想要动态刷新背景,我现在找到的最好办法就是取得子窗口下面的背景的DC,然后自己刷到自己的DC上来。
简而言之,就是用动态读取父窗口的背景,用来作子窗口背景,看起来就是透明的了。
简而言之,就是用动态读取父窗口的背景,用来作子窗口背景,看起来就是透明的了。
#10
能实现这个功能也可以。
让嵌入WORD的ActiveX控件可移动、并且透明
让嵌入WORD的ActiveX控件可移动、并且透明