如题!!!

解决方案 »

  1.   

    下面的例子是刷成白色背景
    HDC hMemDC = ::CreateCompatibleDC(hdc);
    if(hMemDC == NULL)
    return NULL;
    CSize cs(GetWidth()+GetPenWidth(),GetHeight()+GetPenWidth());
    HBITMAP hBmp = ::CreateCompatibleBitmap(hdc,cs.cx,cs.cy);
             ..... HBITMAP hOldBmp =(HBITMAP) ::SelectObject(hMemDC,hBmp);

    PatBlt(hMemDC,0,0,cs.cx,cs.cy,WHITENESS);         ........
      

  2.   

    Y___Y(一叶障目)  
    CDC::FillSolidRect就可以了------------------------------------就这样
      

  3.   

    我做一个画图程序,使用内存DC,原代码如下:(C*View的OnDraw(CDC* pDC)函数中)----- 但是运行后,整个View区域是黑色的?CDC dc;
    CDC* pDrawDC = pDC;
    CBitmap bitmap;
    CBitmap* pOldBitmap;CRect rect;
    GetClientRect(&rect);
    //========================================================
    if (dc.CreateCompatibleDC(pDC))
    {
    if (bitmap.CreateCompatibleBitmap(pDC,
                         rect.Width(), 
             rect.Height()))
    {
    OnPrepareDC(&dc,NULL);
    pDrawDC = &dc;
    pOldBitmap = dc.SelectObject(&bitmap);
    }
    }
    //========================================================
    pDoc->Draw(pDrawDC,ViewID);
    pDrawDC->TextOut(1,1,*str);
    dc.DPtoLP(&rect);
    //========================================================
    if ( pDrawDC != pDC )
    {
    pDC->BitBlt( 0, 0,rect.Width(), rect.Height(),
      &dc, 0, 0, SRCCOPY);
    dc.SelectObject(pOldBitmap);
    bitmap.DeleteObject();
    }
    各位帮忙给看看,是什么问题?
      

  4.   

    用CDC::FillSolidRect()根本就不起作用!怎么办?
      

  5.   

    不可能不起作用
    pOldBitmap = dc.SelectObject(&bitmap);
    dc.FillSolidRect(&rect,RGB(255,255,255));
      

  6.   

    void CDBDCView::MemDraw(CDC* pDC)
    {
    CRect rect;
    GetClientRect(rect);
    CDC memDC;
    CBitmap temBmp;
    memDC.CreateCompatibleDC(pDC);
    temBmp.CreateCompatibleBitmap(&memDC,rect.Width(),rect.Height());
    CBitmap* pOldBmp=memDC.SelectObject(&temBmp);
    CBrush brush(RGB(0,255,255));
    CBrush* pOldBrush=memDC.SelectObject(&brush);
    memDC.Rectangle(rect);
    COLORREF oldColor;
    oldColor=memDC.SetBkColor(RGB(255,0,0));
    memDC.TextOut(100,100,"CSDN");
    pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&memDC,
    0,0,SRCCOPY);
    memDC.SelectObject(pOldBmp);
    memDC.SetBkColor(oldColor);
    }
    上面设置的字体背景为红色,但显示时全是黑色的把字都盖了
    那个定义的也不行刷子
    帮我解释一下这个问题,有什么解决方法
      

  7.   

    嘿嘿,以前做的时候加载了一个24bit的位图
    做最下面的画布。-----------------------------
    http://ma3310.vicp.net
      

  8.   

    void CDBDCView::MemDraw(CDC* pDC)
    {
    CRect rect;
    GetClientRect(rect);
       CDC memDC;
       CBitmap temBmp;
       memDC.CreateCompatibleDC(pDC);
    >>>temBmp.CreateCompatibleBitmap(&memDC,rect.Width(),rect.Height());
       CBitmap* pOldBmp=memDC.SelectObject(&temBmp);
       CBrush brush(RGB(0,255,255));
       CBrush* pOldBrush=memDC.SelectObject(&brush);
       memDC.Rectangle(rect);
       COLORREF oldColor;
       oldColor=memDC.SetBkColor(RGB(255,0,0));
       memDC.TextOut(100,100,"CSDN");
       pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&memDC,0,0,SRCCOPY);
       memDC.SelectObject(pOldBmp);
    >>>memDC.SelectObject(pOldBrush);
       memDC.SetBkColor(oldColor);
    }FROM MSDN:
    A memory DC exists only in memory. When the memory DC is created, its display surface is exactly one monochrome pixel wide and one monochrome pixel high. Before an application can use a memory DC for drawing operations, it must select a bitmap of the correct width and height into the DC.
      

  9.   

    sorry:
    >>>temBmp.CreateCompatibleBitmap(&pDC,rect.Width(),rect.Height());
      

  10.   

    >>>temBmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());---老了!
      

  11.   

    以下代码运行结果为红色。(挣点分不容易呀!)
             CDC dc;
    CDC* pDrawDC = pDC;
    CBitmap bitmap;
    CBitmap* pOldBitmap;

    CRect rect;
    GetClientRect(&rect);
    //========================================================
    if (dc.CreateCompatibleDC(pDC))
    {
    if (bitmap.CreateCompatibleBitmap(pDC,
    rect.Width(), 
    rect.Height()))
    {
    OnPrepareDC(&dc,NULL);
    pDrawDC = &dc;
    pOldBitmap = dc.SelectObject(&bitmap);
    }
    }
    //========================================================
    //pDoc->Draw(pDrawDC,ViewID);
    >>>>>>>>>pDrawDC->FillSolidRect(0,0, 100,100, RGB(255,0,0));
    pDrawDC->TextOut(1,1,_T("ABC"));
    dc.DPtoLP(&rect);
    //========================================================
    if ( 1)//pDrawDC != pDC )
    {
    pDC->BitBlt( 0, 0,rect.Width(), rect.Height(),
    &dc, 0, 0, SRCCOPY);
    dc.SelectObject(pOldBitmap);
    bitmap.DeleteObject();
    }
      

  12.   

    我在OnPrepareDC()中有SetMapMode(MM_TWIPS)语句;当我把这条语句注释掉后,就可以出正常结果了,为什么呢?
      

  13.   

    --->>>Cline(营营[无意苦争春,贯看群芳谢]) 你的例子我试过了,是对的。我要是在该例子的OnPrepareDC()中加入有SetMapMode(MM_TWIPS);也会出现黑屏现象,因为我的程序要支持打印,所以加上了SetMapMode(MM_TWIPS)。你知道原因吗?------分数不是问题,解决这个问题才是问题!可追加或者另开帖给分!!!