如下代码所示在内存里创建一个图片m_Bmp1,放到m_rcFrame_Now区域里但结果m_rcFrame_Now变成了一个黑块
不知道为什么,应该不难,谁给看看

CDC dcmem1;
CBitmap m_Bmp1;
dcmem1.CreateCompatibleDC(dc);
m_Bmp1.CreateCompatibleBitmap(dc, 
m_rcFrame_Now.right-m_rcFrame_Now.left,
m_rcFrame_Now.bottom-m_rcFrame_Now.top);
dcmem1.SelectObject(m_Bmp1);
 
pOldFont=dcmem1.SelectObject(&pFont.fXYZ); 
dcmem1.SetTextColor(RGB(0,0,0)); 
dcmem1.SetBkMode(TRANSPARENT);
dcmem1.TextOut(m_rcFrame_Now.left, m_rcFrame_Now.top, frameinfor);
        
dcmem1.SelectObject(pOldFont);dc->BitBlt(m_rcFrame_Now.left,
m_rcFrame_Now.top-50,
m_rcFrame_Now.right-m_rcFrame_Now.left,
m_rcFrame_Now.bottom-m_rcFrame_Now.top,
&dcmem1,0,0,SRCCOPY);
   m_Bmp1.DeleteObject();   
dcmem1.DeleteDC();

解决方案 »

  1.   

    貌似在dcmem1.SelectObject(m_Bmp1)中少了一个“&”,删除m_Bmp1前要先将其选出内存DCCBitmap *pOldBmp=dcmem1.SelectObject(&m_Bmp1);
    ...
    dcmem1.SelectObject(pOldBmp);
    m_Bmp1.DeleteObject();      
    dcmem1.DeleteDC();
      

  2.   

    dcmem1.SelectObject(m_Bmp1);//后面加上
    dcmem1.FillSolidRect(&m_rcFrame_Now,RGB(200,200,0));//填充上颜色
      

  3.   

    dcmem1.TextOut(m_rcFrame_Now.left, m_rcFrame_Now.top, frameinfor);
    这个貌似有问题,会不会写出界啊?left & top 是多少?bmp确保有那么大么?
      

  4.   

    是哦,3L说得对哦,memdc默认黑色背景,你设置字体黑色还要透明掉..那就全黑了..
      

  5.   

    恩,我改过来了,谢谢。
    这个是一个主要错误,可为什么一定要填充上颜色背景色?
    直接用dcmem1.SetBkMode(TRANSPARENT);去用原来的背景(是一张图片)为什么不行?
      

  6.   

    兼容dc选择位图后用BitBlt把当前dc拷贝到兼容dc。
      

  7.   

    恩,可以结贴了。感谢lambochan bxf19830819 等