VC 保存对话框为图片

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

posted on 2009-07-30 23:33 小猪 阅读(1964) 评论(0)  编辑 收藏 引用 所属分类: VC++


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜