为了使用位图,创建了一个当前DC的兼容CDC对象,然后将位图对象选择进兼容CDC对象,再用BitBlt将兼容CDC对象贴到当前DC里,可以显示图像。但如果创建两个兼容CDC对象dc1,dc2,,先将位图对象选择进一个兼容对象dc1里,再用BitBlt贴到另一个兼容对象dc2里,再将dc2用BitBlt贴到当前DC里,为什么就看不到图像了?代码如下:(凭记忆写出来的,可能有的地方有些出入,大致意思如此)
OnPaint()
{
   CPaintDC dc(this);   CDC dc1,dc2;   dc1.CreateComp...DC(&dc);//创建兼容DC
   dc2.CreateComp...DC(&dc1);//创建兼容DC,如果将参数dc1,改为dc,效果一样。   CBitmap Bitmap;
   Bitmap.LoadBitmap(IDB_BMP);
   dc1.SelectObject(&Bitmap);
   dc2.BitBlt(...&dc1,...SRCCOPY);//参数太多记不清了,只写两个关键的
   dc.BitBlt(...&dc2,...SRCCOPY);
   
}

解决方案 »

  1.   

    CreateCompatibleDC(...)默认的DC含有的位图是1x1黑白位图,
    需要CreateCompatibleBitmap(...)选入合适的位图尺寸才行,
      

  2.   

    要根据实际的DC创建内存兼容DC,而不是根据内存DC
      

  3.   

    哦,是这样子的,第二个兼容DC没有Select位图,这样的话BitBlt就不能正常工作,选择了多大的位图,你的内存DC就有多大的画布,缺省是1*1
      

  4.   

    不Select位图还有没有别的方法来扩大"画布"(一楼的方法是不是就是这个意思)?
      

  5.   

    你可以使用各种方式创建和该内存DC兼容的位图,但是我想必须使用SelectObject来选择进入位图
      

  6.   

    OnPaint()
    {
       CPaintDC dc(this);   CDC dc1   dc1.CreateComp...DC(&dc);//创建兼容DC
       
       CBitmap Bitmap;
       Bitmap.LoadBitmap(IDB_BMP);
       dc1.SelectObject(&Bitmap);
       dc1.BitBlt(...&dc1,...SRCCOPY);//参数太多记不清了,只写两个关键的
       dc.BitBlt(...&dc2,...SRCCOPY);
       
    }
      

  7.   

    nuaawenlin(飘人)大人,这段代码什么意思?
      

  8.   

    同意上述几位观点,不过没看明白为什么要BitBlt两次?