MFC截图并存储为BMP文件
			 2021-09-07
			  39
			 0
			
			
			
				
			
			
		
			    CRect rect;    
    pdlg->GetClientRect(&rect); 
    CDC* pdc =  pdlg->GetDC();
    CBitmap memBitmap;
    memBitmap.CreateCompatibleBitmap(pdc,rect.Width(),rect.Height());
    CDC memDC;    
    memDC.CreateCompatibleDC(pdc);
    memDC.SelectObject(&memBitmap);
    memDC.BitBlt(0,0,rect.Width(),rect.Height(),pdc,0,0,SRCCOPY); 
    CString str;
    CTime t = CTime::GetCurrentTime ();
    str.Format("%d-%d-%d %d_%d_%d",t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond());
    CFileDialog dlg(FALSE,"bmp",str,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
        "24位位图(*.bmp)||");
    if(dlg.DoModal()==IDOK)
    {
        FILE* fp = fopen(dlg.GetPathName(),"wb");
        if(fp==NULL)
        {
            MessageBox("创建失败");
            return;
        }
        BITMAPFILEHEADER    header;
        BITMAPINFOHEADER    info;
        header.bfType  = (WORD)0x4d42;
        header.bfReserved1 = 0;
        header.bfReserved2 = 0;
        header.bfSize = rect.Width()*rect.Height()*3+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);  
        header.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
        fwrite(&header,1,sizeof(BITMAPFILEHEADER),fp);
        info.biBitCount = 24;
        info.biClrImportant = 0;
        info.biClrUsed = 0;
        info.biCompression = BI_RGB;
        info.biHeight = rect.Height();
        info.biPlanes = 1;
        info.biSize = sizeof(BITMAPINFOHEADER);
        info.biSizeImage = 0;
        info.biWidth = rect.Width();
        info.biXPelsPerMeter = 0;
        info.biYPelsPerMeter = 0;
        fwrite(&info,1,sizeof(BITMAPINFOHEADER),fp);
        ULONG num = rect.Width()*rect.Height()*3;
        char* buff;
        try
        {
        buff = new  char[num];
        }
        catch(...)
        {
            buff = NULL;
            MessageBox("图形空间申请失败!");
        }
        GetDIBits(memDC.m_hDC,(HBITMAP)memBitmap.m_hObject,0,rect.Height(),buff,(LPBITMAPINFO)&info,DIB_RGB_COLORS);
        fwrite(buff,1,num,fp);  
        fclose(fp);
        buff?delete [] buff:0;
    }    
    memDC.DeleteDC();
	
	
			
			MFC应用代码
			




