//设备环境
CDC *pDC=GetDC();
HBITMAP hBitmap=(HBITMAP)LoadImag(NULL,"1.bmp",IMAGE_BITMAP,0,0,
LR_LOADFROMFILE);   //二进制位存贮位图,也就是一个句柄. m_bitmap.Attach(hBitmap);   // CBitmap m_bitmap;  得到hBitmap 指向的位图.
BITMAP bm;         //定义一个BITMAP结构 
m_bitmap.GetBitmap(&bm);  //得到BITMAP结构信息

//内存环境
CDC dcImage;
if(!dcImage.CreateCompatibleDC(pDC))   //判断内存环境是否与设备环境一致。
return;
CBitmap* pOldBitmap=dcImage.SelectObject(&m_bitmap);   
                                          //pOldBitmap指向内存环境中的位图
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcImage,0,0,SRCCOPY); //画图 内存环境释放位图!!
dcImage.SelectObject(pOldBitmap); //再次得到该位图。
DeleteObject(m_bitmap.Detach());  //安全释放该位图。????:其中的解释对么,尤其是最后几句,瞎蒙的,还请指教!谢谢!

解决方案 »

  1.   

    //设备环境
    CDC *pDC=GetDC();
    HBITMAP hBitmap=(HBITMAP)LoadImag(NULL,"1.bmp",IMAGE_BITMAP,0,0,
    LR_LOADFROMFILE);   //位图句柄。 m_bitmap.Attach(hBitmap);   // CBitmap m_bitmap;  将位图句柄绑定到位图对象中。
    BITMAP bm;         //定义一个BITMAP结构 
    m_bitmap.GetBitmap(&bm);  //得到位图的BITMAP结构信息

    //内存设备环境
    CDC dcImage;
    if(!dcImage.CreateCompatibleDC(pDC))   //创建内存设备环境
    return;
    CBitmap* pOldBitmap=dcImage.SelectObject(&m_bitmap);   
                                              //将位图对象选入内存设备环境,pOldBitmap指向内存设备环境中原来的位图
    pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcImage,0,0,SRCCOPY); //画图,也即将内存设备环境中的位图拷贝到实际的设备环境中。
    dcImage.SelectObject(pOldBitmap); //将原先的位图对象选入内存设备环境,目的是将选入的位图对象m_bitmap选出,以便释放。
    DeleteObject(m_bitmap.Detach());  //安全释放该位图。应使用:m_bitmap.DeleteObject();
    dcImage.DeleteDC();  //还应释放内存设备环境。