您的位置:首页 > 其它

以图片的形式存储单文档中的内容

2013-08-23 14:49 169 查看
存储指定的控件大小

/*以图片的形式存储*/

void CChartView::OnButtonSavep()

{

// TODO: Add your control notification handler code here

CClientDC SHDC(this);//取得客户区内存DC

CPaintDC dc(this);

CDC memDC;

CRect rect;

CWnd *pWnd = GetDlgItem(IDC_STATIC_CSHOW);/*指定控件*/

pWnd->GetClientRect(&rect);//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);

}

}

存储当前界面大小的图片

C/C++ code

?

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: