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

存储指定的控件大小

/*以图片的形式存储*/
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
?

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);
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值