我在一个DC上绘制好了一个位图,本来想用hBitmap = CreateCompatibleBitmap()这个函数来保存在这个DC绘制好的图形,但是把hBitmap输出到客户区时输出的是黑色的····应该怎么解决?
谢谢了···

解决方案 »

  1.   

    #include "WINDOWSX.H" CClientDC SHDC(this);//取得客户区内存DC
     CPaintDC   dc(this);
     CDC memDC;
     CRect rect;
     GetClientRect(rect); memDC.CreateCompatibleDC(&SHDC);
     CBitmap bm;
     int Width = rect.Width();//
     int Height = rect.Height();//
     bm.CreateCompatibleBitmap(&SHDC, Width, Height);
     CBitmap*  pOld = memDC.SelectObject(&bm);
     memDC.BitBlt(0, 0, Width, Height, &SHDC, 0, 0, SRCCOPY);
     memDC.SelectObject(pOld);
     BITMAP  btm;
     bm.GetBitmap(&btm);
     DWORD  size = btm.bmWidthBytes * btm.bmHeight;
     LPSTR lpData =(LPSTR)GlobalAllocPtr(GPTR, size);
     BITMAPFILEHEADER   bfh;
    /////////////////////////////////////////////
     BITMAPINFOHEADER  bih;
     bih.biBitCount = btm.bmBitsPixel;
     bih.biClrImportant = 0;
     bih.biClrUsed = 0;
     bih.biCompression = 0;
     bih.biHeight = btm.bmHeight;
     bih.biPlanes = 1;
     bih.biSize = sizeof(BITMAPINFOHEADER);
     bih.biSizeImage = size;
     bih.biWidth = btm.bmWidth;
     bih.biXPelsPerMeter = 0;
     bih.biYPelsPerMeter = 0;
     GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
     bfh.bfReserved1 = bfh.bfReserved2 = 0;
     bfh.bfType = ((WORD)('M'<< 8)|'B');
     bfh.bfSize = 54 + size;
     bfh.bfOffBits = 54; CFileDialog dlg(false,_T("BMP"),_T("*.bmp"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("*.bmp|*.bmp|*.*|*.*|"));
     if (dlg.DoModal()==IDOK)
     {
      CFile  bf;
      CString ss=dlg.GetPathName();
      if(bf.Open(ss, CFile::modeCreate | CFile::modeWrite))
      {
       bf.WriteHuge(&bfh, sizeof(BITMAPFILEHEADER));
       bf.WriteHuge(&bih, sizeof(BITMAPINFOHEADER));
       bf.WriteHuge(lpData, size);
       bf.Close();
      }
      GlobalFreePtr(lpData);
     }
    弄好了给分啊
      

  2.   

    用 SelectObject试试
    HBITMAP hBMp=SelectObject(hDC,hBmpOld);