如题,想保存一个窗口图像到bmp,从网上参考别人一段,但执行起来,经常出错,检查发现可能是DC没有释放,加上后,还是异常,请高手指点一下,感谢~!~!                  CDC *pDC; 
CRect rect;
CStatic *pCurve=(CStatic *)GetDlgItem(IDC_STATIC_CURVE);//保存曲线的窗口
if(pCurve==NULL) return;
pCurve->GetClientRect(&rect);
        pDC=(CDC *)pCurve->GetDC();
   
    CDC dc;
        dc.CreateDC("DISPLAY",NULL,NULL,NULL);
//dc.CreateCompatibleDC(pDC); //rect.bottom+=15; //调整图像
//rect.right+=15;
        CBitmap bm;
        bm.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height()); //定义bmp图像的宽阔,高
        CDC tdc;
        tdc.CreateCompatibleDC(&dc);
        CBitmap*pOld=tdc.SelectObject(&bm);
        //tdc.BitBlt(0,0,rect.Width(),rect.Height(),&dc,rect.left,rect.top,SRCCOPY);
tdc.BitBlt(0,0,rect.Width(),rect.Height(),&dc,10,50,SRCCOPY);
    tdc.SelectObject(pOld);
        
BITMAP btm;
        bm.GetBitmap(&btm);
        DWORD size=btm.bmWidthBytes*btm.bmHeight;
        //LPSTR lpData=(LPSTR)GlobalAllocPtr(GPTR,size);
LPSTR lpData=(LPSTR)GlobalAlloc(GPTR,size);        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);
        BITMAPFILEHEADER bfh;
        bfh.bfReserved1=bfh.bfReserved2=0;
        bfh.bfType=((WORD)('M'<< 8)|'B');
        bfh.bfSize=54+size;
        bfh.bfOffBits=54;        CString strFilter = "BMP Files (*.bmp)|*.bmp|"; 
        CString m_wszFileName;//=m_FileName.Left(m_FileName.GetLength()-4)+".bmp";//"CopyScreen.bmp";
        CFileDialog dlgSave(FALSE, ".bmp", m_wszFileName, OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, strFilter);
        if (dlgSave.DoModal() == IDCANCEL)
            return ;
        m_wszFileName = dlgSave.GetPathName(); 
        CFile bf;
        if(bf.Open(m_wszFileName,CFile::modeCreate|CFile::modeWrite))
        {
                bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER));
                bf.WriteHuge(&bih,sizeof(BITMAPINFOHEADER));
                bf.WriteHuge(lpData,size);
                bf.Close();        
        }        
    GlobalFree(lpData);   

 //****************原来到这里后面,我加上了释放DC,但还是异常****************************
//pDC->DeleteDC();
pCurve->ReleaseDC(pDC);
dc.DeleteDC();
tdc.DeleteDC();