windows程序设计中怎样保存一个绘制好的位图?解决方案

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

------解决方案--------------------
C/C++ code
#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);
 }