请问如何在一幅位图上显示另一幅图?我已经将一幅100M的位图作为背景用SetDIBitsToDevice()函数显示出来了,现要在上面再显示一个小的位图,不知道有什么好的方法?注:背景位图很小(只有几兆)的时候,我用下面的语句可以实现,但背景位图很大时就不能下面的代码了。CClientDC dc(this);
m_dcMem.CreateCompatibleDC( &dc );pOldBitmap=m_dcMem.SelectObject (&Bitmap);
dc.BitBlt(offsetx,offsety,m_size.cx-10,m_size.cy-10, &m_dcMem,sourcex, sourcey,SRCCOPY);pOldBitmap=m_dcMem.SelectObject (&bmpCar);  
dc.BitBlt(offsetx,offsety,m_size.cx-10,m_size.cy-10, &m_dcMem,sourcexcar, sourceycar,SRCCOPY);

解决方案 »

  1.   

    你可以将该图BitBlt到100M的位图所在的DC上就可以了
      

  2.   

    http://www.vckbase.com/document/viewdoc/?id=532
      

  3.   

    ddmor(小明) ,你说“将该图BitBlt到100M的位图所在的DC上就可以了”,不会覆盖了背景位图吗?
      

  4.   

    不会,BitBlt指定位置和宽高,它只会覆盖你指定的矩形。
      

  5.   

    xiahaiqing(小和去) 说得很对,BitBlt()函数只会覆盖你指定的矩形区域的画面,其余位置的背景是不会覆盖的,在MSDN中查阅一下BitBlt()的用法,很简单的。CClientDC dc(this);pOldBitmap=dc->SelectObject (&bmpCar);  
    dc.BitBlt(offsetx,offsety,m_size.cx-10,m_size.cy-10, NULL,sourcexcar, sourceycar,SRCCOPY);
      

  6.   

    CClientDC dc(this);pOldBitmap=dc->SelectObject (&Bitmap);
    dc.BitBlt(offsetx,offsety,m_size.cx-10,m_size.cy-10, NULL,sourcex, sourcey,SRCCOPY);pOldBitmap=dc->SelectObject (&bmpCar);
    offsetx = 100;
    offsety = 100;
    dc.BitBlt(offsetx,offsety,m_size.cx-10,m_size.cy-10, NULL,sourcexcar, sourceycar,SRCCOPY);
      

  7.   

    powerxsydj,因为我的背景图有100M,不能用pOldBitmap=dc->SelectObject (&Bitmap);
    dc.BitBlt(offsetx,offsety,m_size.cx-10,m_size.cy-10, NULL,sourcex, sourcey,SRCCOPY);ddmor(小明)的意思是否是背景图用SetDIBitsToDevice()显示以后,上面的小图用BitBlt()指定位置和宽高来显示?
      

  8.   

    我刚才用下面的代码试了一下,但是不行,只看到背景图了,上面的小图没有显示出来,不知道是什么问题?请大家帮我看看。         CPaintDC dc(this); 
             CDC* pDC = &dc; CRect rcDest;
    GetClientRect(&rcDest);
    rcDest.NormalizeRect(); cxClient =rcDest.Width()-5; 
    cyClient =rcDest.Height()-5; SetDIBitsToDevice (hdc, 
               0,0,
               cxClient, cyClient, 
               sourcex, sourcey, 
               0, cyDib, pBits, pbmi, DIB_RGB_COLORS) ; pOldBitmap=dc.SelectObject (&bmpCar);  
            dc.BitBlt(offsetx,offsety,cxClient-10,cyClient-10, NULL,
                      sourcexcar, sourceycar,SRCCOPY); 
      

  9.   

    我查了一下发现dc.BitBlt()返回是0,不知道为什么不成功,请朋友们帮我看看哪里不对,谢谢了!