代码如下:
void CUMTView::OnDraw(CDC* pDC)
{
CUMTDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.TextOut(0,0,"memDC drawing");
pDC->BitBlt(0,0,100,100,&memDC,0,0,SRCCOPY);
}
问题:1 能顺序通过编译,但运行后什么也没有。
   2 如果将CDC memDC语句换成CDC* memDC或CDC* memDC=NULL(下面的memDC作相应的变换)也能通过编译,但调试的时候在memDC.CreateCompatibleDC(pDC)一语句上通不过,在ASSERT(m_hDC==NULL)一句出现异常。

解决方案 »

  1.   

    memDC.CreateCompatibleDC(pDC);
    memDC.TextOut(0,0,"memDC drawing");
    pDC->BitBlt(0,0,100,100,&memDC,0,0,SRCCOPY);你这样是不行的。内存dc中必须要设置一个兼容位图才行。你想,textout绘制的东西在哪里呢?
      

  2.   

    你要写memDC drawing直接调用pdc的textout就可以了呀,呵呵如果要bitblt的话,一般来说是要把一个位图选进内存dc,再bitblt到界面上的,
      

  3.   

    我本来是在程序用pDC-MoveTo(x1,y1);pDC->LineTo(x2,y2)画图的,由于画得太多,显示太慢且闪烁,所以想先在memDC上画好,再BitBlt到pDC.我只是用TextOut举个例子,真正的是画线。效果跟这个一样。
      

  4.   

    双缓存,不大懂。那画线能不能先在一个内存DC上画好再BitBlt到显示DC上呢?有的话,具体应该怎么做?
      

  5.   

    内存DC不同于实际的DC 一定要先选进位图 才可以进行绘图等操作
    先CreateBitmap 再SelectObject
      

  6.   

    下面这段代码只产生一个黑块:
    CDC memDC;
    memDC.CreateCompatibleDC(pDC);
    CBitmap bmp;
    bmp.CreateCompatibleBitmap(&memDC,100,100);
    memDC.SelectObject(&bmp);
    memDC.MoveTo(0,0);
    memDC.LineTo(100,100);
    pDC->BitBlt(0,0,100,100,&memDC,0,0,SRCCOPY);
      

  7.   

    bmp.CreateCompatibleBitmap(&memDC,100,100);错误
    应该是bmp.CreateCompatibleBitmap(pDC,100,100);
      

  8.   

    to  wuprograme(不想想太多):效果是一样的。我试过了。
      

  9.   

    哦,怎么会呢,那你把memDC.CreateCompatibleDC(pDC);删除看看行不行
      

  10.   

    楼上的提醒了我,你没有设置颜色,那么你画线的颜色就是黑色,所以你什么也看不到(当然前提是你的背景也是黑色,bmp.CreateCompatibleBitmap(pDC,100,100);这个创建的背景色和你的pDC一样
      

  11.   

    多谢多谢。我把选了颜色后就有了。可是有没有简单的办法将bmp.CreateCompatibleBitmap(pDC,100,100);创建的背景色是白色呢?最好是自己能调颜色就好了。
      

  12.   

    下面这段代码产生的是一个黑块,从左上到右下画了一条红色线条,但其中的背景颜色设置没有效果。
    CDC memDC;
    pDC->SetBkColor(RGB(255,255,255));
    memDC.CreateCompatibleDC(pDC);
    memDC.SetBkColor(RGB(255,255,255));
    CBitmap bmp;
    bmp.CreateCompatibleBitmap(pDC,100,100);
    memDC.SelectObject(&bmp);
    CPen pen(PS_SOLID,1,RGB(255,0,0));
    CPen* pOldPen=memDC.SelectObject(&pen);
    memDC.MoveTo(0,0);
    memDC.LineTo(100,100);
    memDC.SelectObject(pOldPen);
    pDC->BitBlt(0,0,100,100,&memDC,0,0,SRCCOPY);
      

  13.   

    bmp.CreateCompatibleBitmap(pDC,100,100);pDC的背景就是CBitmap 的背景,也就是说你想改变背景只有改变pDC的背景色,pDC->SetBkColor(RGB(255,255,255));这句并不是改变背景,如果是对话框的话应该默认是color_3dface,不可能是黑色,除非你在Onpaint改变了对话框的背景色。
      

  14.   

    我是在视图类画线。在OnDraw()函数里操作。它的pDC应该怎样改变背景颜色?