CDC MemDC;
 
HBITMAP HBM;//1、创建一个位图对象,下面进行初始化     HBM=(HBITMAP)LoadImage(NULL,L"C:\\test.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
 
    //载入位图
 
    BITMAP bitmap;
 
    GetObject(HBM,sizeof(bitmap),&bitmap);//获得位图信息
 
    MemDC.CreateCompatibleDC(NULL);  //2、创建兼容DC
 
    HBITMAP hOldBitmap = SelectObject(MemDC,HBM);//3、选入位图至内存DC
 
    DeleteObject(HBM);//删除位图
 
    //将内存DC中的位图复制到客户区DC中
 
   BitBlt(dc,0,0,bitmap.bmWidth,bitmap.bmHeight,MemDC,0,0,SRCCOPY);
   SelectObject(hdcmen, hOldBitmap);
   DeleteDC(MemDC);

解决方案 »

  1.   

    HBITMAP hOldBitmap = SelectObject(MemDC,HBM);
    SelectObject(hdcmen, hOldBitmap);
      

  2.   

    你得把旧的位图先选入才能DeleleObject,否则会崩掉的。
      

  3.   

    2楼显然不对,  位图作为五大gdi元素,那么当被程序员选中的时候,是不需要再次回复原来的。因为默认是没有位图的。所以你如果只是用一次位图,那么就可以:就可以直接删除了。第二次使用,和第一次一样,直接删除即可。
      

  4.   

    在删除前你已经选入了新的位图了啊。这样就OK了。要不然会崩溃的。像你程序那样写就OK了。
      

  5.   

    楼主在1楼的回复已经说明他已经把原来的hOldBitmap选中了。、这个做法是正确的。可以避免内存泄漏。DeleteDC(MemDC);时候就不会有问题了。否则,bitmap资源释放不了。