我想使用ActiveX控件实现这样的功能:从图片文件中读取图片信息,在注册了控件的机器上显示该图片,在没注册的机器上不显示。我的图片背景是白色的,图片上有红色黄色等颜色,当显示的时候让白色透明,只显示其他颜色,部分代码如下:
IStream *pIStream;
CPictureHolder m_pic;
CDC MemDC;
CBitmap bmpFace;
CBitmap *pOldBitmap;//读取图片数据到char型数组中
//使用char型数组创建Stream对象
OleLoadPicture(pIStream, picturebufferlength, TRUE, IID_IPicture,(LPVOID*)&m_pic.m_pPict);
//得到图片的宽度和高度
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); MemDC.CreateCompatibleDC(NULL);
bmpFace.CreateCompatibleBitmap(&MemDC, sizeInPix.cx, sizeInPix.cy);
//将这幅图片选入内存DC
pOldBitmap = MemDC.SelectObject(&bmpFace); m_pic.m_pPict->Render(MemDC.GetSafeHdc(), 0, 0, sizeInPix.cx, sizeInPix.cy,
0, sizeInHiMetric.cy, sizeInHiMetric.cx, -sizeInHiMetric.cy, &rcBounds);以上代码执行了以后什么都没显示,求高人指点。
IStream *pIStream;
CPictureHolder m_pic;
CDC MemDC;
CBitmap bmpFace;
CBitmap *pOldBitmap;//读取图片数据到char型数组中
//使用char型数组创建Stream对象
OleLoadPicture(pIStream, picturebufferlength, TRUE, IID_IPicture,(LPVOID*)&m_pic.m_pPict);
//得到图片的宽度和高度
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); MemDC.CreateCompatibleDC(NULL);
bmpFace.CreateCompatibleBitmap(&MemDC, sizeInPix.cx, sizeInPix.cy);
//将这幅图片选入内存DC
pOldBitmap = MemDC.SelectObject(&bmpFace); m_pic.m_pPict->Render(MemDC.GetSafeHdc(), 0, 0, sizeInPix.cx, sizeInPix.cy,
0, sizeInHiMetric.cy, sizeInHiMetric.cx, -sizeInHiMetric.cy, &rcBounds);以上代码执行了以后什么都没显示,求高人指点。
把这句:
MemDC.CreateCompatibleDC(NULL);
改成
MemDC.Attach(pdc);
之后就可以显示了,但是显示的图片背景不透明
加了TransparentBlt也不行
不知道是不是我上面的代码有问题
If this handle is NULL, the function creates a memory DC compatible with the application's current screen.
我的控件在别的应用程序中绘图,是不是可以传NULL呢?另外:
void OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
这个pdc是什么dc呢,目标dc吗?
执行了MemDC.CreateCompatibleDC(pdc)后,MemDC为空,到pOldBitmap = MemDC.SelectObject(&bmpFace)的时候就异常了
http://topic.csdn.net/t/20060503/16/4729002.html
http://topic.csdn.net/t/20040406/10/2930670.html
另外创建内存图画好后还得用 BILBIT or strenth××× 函数绘制到显示设备上去
我记的内存图方式肯定是非透明的,如果想透明,那就绘制前先把底色图贴上去那两函数可能写的不对,查查帮助吧