CClientDC cdc(this); cdc.TextOut(0,20,"cdc"); CDC dc;
dc.CreateCompatibleDC(&cdc); dc.TextOut(0,0,"aaa");
cdc.BitBlt(0,0,100,100, &dc, 0,0,SRCCOPY);为什么“cdc”可以显示,而"aaa"不能显示

解决方案 »

  1.   

    CClientDC cdc(this);cdc.TextOut(0,20,"cdc");CDC dc;
    dc.CreateCompatibleDC(&cdc);
    CBitmap Bitmap;
    Bitmap.CreateCompatibleBitmap(&cdc, 100, 100);
    dc.SelectObject(&Bitmap);dc.TextOut(0,0,"aaa");
    cdc.BitBlt(0,30,100,100, &dc, 0,0,SRCCOPY);
      

  2.   

    dc.TextOut(0,0,"aaa");
    可能返回失败了.
      

  3.   

    多谢yang79tao()!还有问一下,默认状态下创建的内在兼容位图是黑色的,怎么创建其他颜色的内在兼容位图?
      

  4.   

    你可以改变它的位图颜色,用CDC::FillSolidRect()
      

  5.   

    dc 绘图没有目标,要选入一张兼容位图作为绘图目标。另外要显示出来,在用 BitBlt 复制到 CDC 就行了。创建的内在兼容位图是黑色的,是因为 Bitmap.CreateCompatibleBitmap(&cdc, 100, 100);中参考场景选的不对吧。如果选了 cdc 应该没问题了。你可能选择了 dc
      

  6.   

    各位多谢,下面的代码还是有错误:
    CPaintDC cdc(this);
    CDC dc;
    CBitmap bmp;
    CRect rc;
    this->GetClientRect(&rc);
    cdc.FillSolidRect(rc.left, rc.top, rc.right, rc.bottom, bkColor);
    dc.CreateCompatibleDC(&cdc);
    bmp.CreateCompatibleBitmap(&cdc, rc.right-rc.left, rc.bottom-rc.top);
    dc.SelectObject(&bmp);
    另外:
    rdsnow(Ling) :我选的是dc,不是cdc
      

  7.   

    没有SelectObject当然不能显示了
      

  8.   

    xiehuiqi(谢):
    我已经SelectObject()了:dc.SelectObject(&bmp);但是还是显示黑色背景
      

  9.   

    dc.FillSolidRect(&rect,RGB(0xff,0xff,0xff));
      

  10.   

    CRect rect;
    GetClientRect(&rect);
    dc.FillSolidRect(&rect,RGB(0xff,0xff,0xff));
      

  11.   

    kbsoft(让世界充满爱!):
    这个当然是可以的拉,CreateCompatibleBitmap创建出来的bitmap选入内存DC后的背景颜色,或者说Bitmap是黑色的要怎么解决呢?
    因为我想改变这张位图的颜色的
      

  12.   

    CPaintDC cdc(this);
    CDC dc;
    CBitmap bmp;
    CRect rc;
    this->GetClientRect(&rc);
    cdc.FillSolidRect(rc.left, rc.top, rc.right, rc.bottom, bkColor);
    dc.CreateCompatibleDC(&cdc);
    bmp.CreateCompatibleBitmap(&cdc, rc.right-rc.left, rc.bottom-rc.top);
    cdc.SelectObject(&bmp);//由原始dc创建bmp,不要从mdc创建,试试
      

  13.   

    从原始DC创建是可以的,但是我还要画别的很多东西,于是要双缓冲,所以要在内存DC里面创建,再BitBlt到原始DC中结论,还是要在内存DC中创建彩色BMp……
      

  14.   

    有原始DC创建的意思是 创建DC时候色彩位数参考原始 dc,而不是由原始 dc 直接画。kbsoft(让世界充满爱!) 的代码是可以画出彩色图片的。看到这一行了:dc.CreateCompatibleDC(&cdc);cdc 就是作为色彩位数参考的原始 dc
      

  15.   

    如果你打成: dc.CreateCompatibleDC(&dc); 则会显示成黑白位图总之在使用 CreateCompatibleDC 和 CreateCompatibleBitmap 函数时不能用返回的 hDC 作为参考 hDC ,这样做的结果位图是单色的。正确的做法是两个函数的参考 hDC 都使用窗口客户区的 hDC