GDI中, 用CDC画图时, 如何将新画的图设置成背景?
 设置CDC为TRANSPARENT了.
 因为我要在上面写文字,发现文字的背景是最先的背景,而导致新画上的图形背覆盖,
 我想实现的是文字写上去后,它的背景是我刚刚完成的画图? 希望的到指教???

解决方案 »

  1.   

    void CCreateMap::DrawMoveMap(CDC *pDC)
    {
    if ( pDC == NULL ) return; CRect rcMap;
    GetClientRect(rcMap);
    if ( rcMap.IsRectEmpty() ) return; CDC MemDC;  
    CBitmap MemBitmap;

    MemDC.CreateCompatibleDC(NULL);
    ASSERT ( MemDC );
    MemDC.SetStretchBltMode(HALFTONE);
    MemDC.SetMapMode(TRANSPARENT);

    MemBitmap.CreateCompatibleBitmap(pDC ,rcMap.Width(),rcMap.Height());
    CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);       // 设置背景色.
    MemDC.FillSolidRect( rcMap, COL_BACKGROUND ); m_pCurPos.x = rcMap.Width()/2;
    m_pCurPos.y = rcMap.bottom/2; for ( int i=0; i<m_nMoveCount; i++ )
    DrawMoveItem(&MemDC,i); // Copy DC
    pDC->BitBlt(rcMap.left,rcMap.top,rcMap.Width(), rcMap.Height(),&MemDC,0,0,SRCCOPY);
    //Draw over, delete dc memory
    MemBitmap.DeleteObject();
    MemDC.DeleteDC();
    }void CCreateMap::DrawMoveItem(CDC *pDC, int nIndex)
    {
       // ...... 画图形过程.
       // 不是导入图象,是通过画图函数画的图,
       // 写文字.
       DrawTheText(....);// 但是就是不行,文字背景是黑色(开始设置的颜色).
    }void CCreateMap::DrawTheText(CDC* pDC, CRect rcItem, COLORREF col, LPCTSTR lpText, BOOL bLeft /*= TRUE*/)
    {
            pDC->SetTextColor ( col );
    CFont* def_font = pDC->SelectObject(&m_SysFont);
    pDC->DrawText(lpText, strlen(lpText), rcItem,(bLeft?DT_LEFT:DT_RIGHT));
    pDC->SelectObject(def_font);
    }>>>>>>>>>>>>>
    不知道在那里出了问题???
      

  2.   

    // ...... 画图形过程. 
      // 不是导入图象,是通过画图函数画的图, 
      pDC->SetBkColor(TRANSPARENT);
    // 写文字. 
      DrawTheText(....);// 但是就是不行,文字背景是黑色(开始设置的颜色). 
      

  3.   

    // ...... 画图形过程. 
      // 不是导入图象,是通过画图函数画的图, 
      pDC->SetBkColor(TRANSPARENT);
    // 写文字. 
      DrawTheText(....);// 但是就是不行,文字背景是黑色(开始设置的颜色). 
      

  4.   

    pDC->SetBkColor(TRANSPARENT); 
    写错了
    pDC->SetBkMode(TRANSPARENT);
      

  5.   

    但为什么?将pDC->SetMapMode(TRANSPARENT);
    方到这里面就无效呢?void CCreateMap::DrawTheText(CDC* pDC, CRect rcItem, COLORREF col, LPCTSTR lpText, BOOL bLeft /*= TRUE*/) 

    pDC->SetMapMode(TRANSPARENT);
    pDC->SetTextColor ( col ); 
    CFont* def_font = pDC->SelectObject(&m_SysFont); 
    pDC->DrawText(lpText, strlen(lpText), rcItem,(bLeft?DT_LEFT:DT_RIGHT)); 
    pDC->SelectObject(def_font); 

      

  6.   


    修改成就好了??
    pDC->SetTextColor ( col );
    pDC->SetMapMode(TRANSPARENT);