在mfc项目dialog中如何使内存dc的背景透明

在mfc项目dialog中怎么使内存dc的背景透明
本帖最后由 u010827382 于 2014-11-02 12:55:20 编辑
是这样:我在onpaint中使用的是双缓冲(dc和m_MemDC),同时我想自己再建一个dc(m_ClothDC)用来存储一些药显示的图片, 而m_MemDC用来画背景图(这样做主要是应为我用CImage加载了很多图,直接在m_MemDC上画的话太卡。。。),但是如下面代码的话,运行结果是图片出来了,但是背景没出来,全是黑色,所以我想知道有什么途径把m_ClothDC的背景弄成透明,这样背景就能出来了!请高手指教一下。或者这样的思路是错的?


vvoid **dlg:::OnPaint()
{
        CRect rect;
GetClientRect(&rect);
CPaintDC dc(this);

CBitmap MemBitmap;//定义一个位图对象
m_MemDC.CreateCompatibleDC(NULL); //建立与屏幕显示兼容的内存显示装备
MemBitmap.CreateCompatibleBitmap(&dc, rect.Width(),rect.Height()); //建立一个与屏幕兼容的位图

m_MemDC.SelectObject(&MemBitmap);//将位图选入到内存显示设备中
dc.SetStretchBltMode(HALFTONE); 
m_MemDC.SetStretchBltMode(HALFTONE); 
m_BKbitmap.Draw(m_MemDC, 0,0,rect.Width(), rect.Height());  // m_BKbitmap是CImage对象
m_MemDC.StretchBlt(0, 0,rect.Width(), rect.Height(), &m_ClothDC, 0, 0, rect.Width(), rect.Height(),SRCCOPY);
dc.StretchBlt(0, 0,rect.Width(), rect.Height(), &m_MemDC, 0, 0, rect.Width(), rect.Height(),SRCCOPY);
m_MemDC.DeleteDC();   
}  
------解决思路----------------------
把m_MemDC.StretchBlt(0, 0,rect.Width(), rect.Height(), &m_ClothDC, 0, 0, rect.Width(), rect.Height(),SRCCOPY);改成
m_MemDC.TransparentBlt(0, 0, rect.Width(), rect.Height(), &m_ClothDC, 0, 0, rect.Width(), rect.Height(), RGB(0, 0, 0));

------解决思路----------------------
m_MemDC.CreateCompatibleDC(&dc);
------解决思路----------------------
对话框背景透明,必须使用层窗口,那么就需要使用gdi+来绘制图片和文字。