CClientDC pClientDC(this);
CDC memDC1,memDC2;
CBitmap memBitmap1,memBitmap2;
//先写入memDC1
 memDC1.DeleteDC();
 memBitmap1.DeleteObject();
 memDC1.CreateCompatibleDC(NULL);
 memBitmap1.CreateCompatibleBitmap(pClientDC,m_wMapWidth,m_wMapHeight);
 memDC1.SelectObject(&memBitmap1);
 //do somthing
  memDC1.SetPixel(...)
  memDC1.SetPixel(...)
  ...
 pClientDC->BitBlt(0,0,rRect.Width(),rRect.Height(),&memDC1,0 ,0,SRCCOPY)
///写入memDC2
 CPen penSilver(PS_SOLID,2,RGB(192,192,192));
 CBrush brSilver(RGB(192,192,192));
 memDC2.DeleteDC();
 memBitmap2.DeleteObject();
 memDC2.CreateCompatibleDC(NULL);
 memBitmap2.CreateCompatibleBitmap(pClientDC,m_wMapWidth,m_wMapHeight);
 memDC2.SelectObject(&memBitmap2);
 memDC2.SelectObject(penRed);
 memDC2.SelectObject(brRed);
  //do something
 memDC2.Rectangle(x-1 ,y-1,x+1,y+1);
 .... pClientDC->BitBlt(0,0,rRect.Width(),rRect.Height(),&memDC2,0 ,0,SRCCOPY)
//////
结果输出的只有memDC2的内容,其它部分全变黑了(本来要有些图像)的
有没有可以使两个图加起来啊.
memDC1 和memDC2一定要分开的
请各位帮帮忙

解决方案 »

  1.   

    将memDC2的内容注释掉看输出的是什么
      

  2.   

    补充:memDC1 memDC2可以分开,没有什么问题。
      

  3.   

    什么叫做memDC1和memDC2一定要分开?画出来的效果肯定是重合的,何必一定要分开
      

  4.   

    什么叫做memDC1和memDC2一定要分开?画出来的效果肯定是重合的,何必一定要分开
    --------------------------
    我的意思是一定要用两个CDC来画图我就是要让两个图重合起来,但是,好像是被memDC2中的背景刷给刷黑了.
    本来,我想用memDC1.SetPixel(...)来画出一个矩形图作为背景,然后再有memDC2.Rectangle(x-1 ,y-1,x+1,y+1);画出一些点点,最后用pClientDC->BitBlt(...)显示到屏幕上.但结果memDC1画的图却被刷成黑色了,屏幕显示的只有黑色的背景和memDC2画的一些点点
      

  5.   

    第2个SRCCOPY改为SRCAND,否则你只能看到最后贴出来的。
      

  6.   

    两个兼容DC都是pClientDC的,当然会出现后面的覆盖前面的。
    解决如下
    memDC1.CreateCompatibleDC(pClientDC);
    memBitmap1.CreateCompatibleBitmap(pClientDC,m_wMapWidth,m_wMapHeight);
    memDC1.SelectObject(&memBitmap1);
    ...
    memDC2.CreateCompatibleDC(&memDC1);
    memBitmap2.CreateCompatibleBitmap(&memDC1,m_wMapWidth,m_wMapHeight);
    memDC2.SelectObject(&memBitmap2);
    ...
    memDC1.BitBlt(0,0,rRect.Width(),rRect.Height(),&memDC2,0 ,0,SRCCOPY);
    pClientDC->BitBlt(0,0,rRect.Width(),rRect.Height(),&memDC1,0 ,0,SRCCOPY)
      

  7.   

    DentistryDoctor(牙科医生) 
    方法不错,我试试
      

  8.   

    不行啊DentistryDoctor(牙科医生) 方法还是被刷黑了
      

  9.   

    to basboy(basboy)
    没有看到SetStyle之类方法啊.
    to kevin_wang(勇气不再有) 
    我不喜欢这个方法,我试的时候也用过,但memDC2的所画的图会反色.
    如果没有其它方法只好用这个了.:(
      

  10.   

    我试了
    memDC1.BitBlt(0,0,rRect.Width(),rRect.Height(),&memDC2,0 ,0,SRCCOPY);
    ==>
    memDC1.BitBlt(0,0,rRect.Width(),rRect.Height(),&memDC2,0 ,0,SRCPAINT);
      

  11.   

    老兄,你MemDC1和MemDC2写入显示器的时候写入了同一个坐标,也就是BitBlt函数得前四个参数你一样了,如你第二个BitBlt函数改为pClientDC->BitBlt(rRect.Width(),0,rRect.Width(),rRect.Height(),&memDC2,0 ,0,SRCCOPY),就没问题了,可以两个全显示了,你试试吧。pClientDC->BitBlt(0,0,rRect.Width(),rRect.Height(),&memDC1,0 ,0,SRCCOPY)
    pClientDC->BitBlt(0,0,rRect.Width(),rRect.Height(),&memDC2,0 ,0,SRCCOPY)