还是上午的问题:想在一个大图的背景下绘制30个小图片,现在要使用双缓冲避免闪烁,
MemDC是内存的对象,dc是真正的屏幕,为了便于加入小图片,由定义了另一个内存的对象
MemDC1,我的OnPaint()函数如下:        CPaintDC dc(this);
CDC MemDC,MemDC1; CBitmap m1;
CBitmap MemBitmap;
MemDC1.CreateCompatibleDC(&dc);
MemDC.CreateCompatibleDC(&dc);    //下面建立一个与屏幕显示兼容的位图
    MemBitmap.CreateCompatibleBitmap(&dc,m_nBoardWidth,m_nBoardHeight);  
    CBitmap *pOldBmp=MemDC.SelectObject(&MemBitmap);
    pOldBmp = MemDC.SelectObject(&m_Back);//获取背景
    MemDC.BitBlt(0, 0, m_nBoardWidth, m_nBoardHeight, &MemDC, 0, 0, SRCCOPY);//先在内存画背景                                                                               //大图
    for (i = 0; i < 30; i++)
{
          m1.LoadBitmap(IDB_BITMAP1+i-1);//循环获取30个小图
  pOldBmp = MemDC1.SelectObject(&m1);
  MemDC.BitBlt(pt.x, pt.y, 36,36, &MemDC1, 0, 0, SRCCOPY);//接着画小图
  m1.DeleteObject();
}

   dc.BitBlt(0, 0, m_nBoardWidth, m_nBoardHeight, &MemDC, 0, 0, SRCCOPY);
                                //将绘制的内容刷新到屏幕上
   MemDC.SelectObject(&pOldBmp);//恢复内存DC的原位图
   MemDC.DeleteDC();//释放内存DC
   MemDC1.DeleteDC();
   MemBitmap.DeleteObject();现在问题是:一个大黑框,没有背景图片,小图片都在,请教各位,代码错在哪里呢?没办法跟踪调试

解决方案 »

  1.   

    MemDC.BitBlt(0, 0, m_nBoardWidth, m_nBoardHeight, &MemDC, 0, 0, SRCCOPY);//先在内存画背
    这句是干啥的?从内存DC到同一内存DC,不是等于没有?
      

  2.   

    MemDC.BitBlt(0, 0, m_nBoardWidth, m_nBoardHeight, &MemDC, 0, 0, SRCCOPY);//
    这句是什么意思啊,从MemDC拷贝到MemDC?
    还有MemBitmap干什么用的啊?
      

  3.   

    MemBitmap:一个与屏幕显示兼容的位图就算把MemDC.BitBlt(0, 0, m_nBoardWidth, m_nBoardHeight, &MemDC, 0, 0, SRCCOPY);//
    改成MemDC.BitBlt(0, 0, m_nBoardWidth, m_nBoardHeight, &MemDC1, 0, 0, SRCCOPY);//
    也是一样啊
    请教大家怎么改呢?