存储指定的控件大小
/*以图片的形式存储*/
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);
}
}
存储当前界面大小的图片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #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); } |