• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

Mschart控件图象打印处理

发布: 2007-7-01 20:40 | 作者: admin | 来源: | 查看: 21次 | 进入软件测试论坛讨论

领测软件测试网

mschart图象打印的VC程序处理:

在VC中,实现打印比在VB中困难很多,在如题的问题中,VB的解决方案很简单:

VB的解决方案:

原理:mschart.editcopy(拷贝控件显示图象)

printer.print mschart.openclipboard(VB语句解释)(打印剪贴板内容)

但在VC中,打印不是一件容易的事,我把在网友帮助下解决的Mschart控件的打印实现源码给大家贴出来,作为参考

具体实现,

 HANDLE hDib;
 HPALETTE hPalette;
 m_mschart.GetPlot().GetBackdrop()
  .GetFill().GetBrush().GetFillColor().Set(255, 255, 255);
 m_mschart.GetPlot().GetBackdrop().GetShadow().SetStyle(FALSE);//阴影

 m_mschart.EditCopy(); 
 if(OpenClipboard())//m_mschart.
 {
  hDib = GetClipboardData(CF_DIB);
  hPalette = (HPALETTE)GetClipboardData(CF_PALETTE);
  CloseClipboard();
 }
 else
  return;
 m_mschart.GetPlot().GetBackdrop()
  .GetFill().GetBrush().GetFillColor().Set(192, 192, 192);
 m_mschart.GetPlot().GetBackdrop().GetShadow().SetStyle(TRUE);//阴影

 CPrintDialog mypd(FALSE);// 构造打印设置对话框对象
 mypd.GetDefaults();  // 检取缺省打印设备的设备环境
 DEVMODE *dm = mypd.GetDevMode();// 提取缺省打印机的DEVMODE数据
 dm->dmOrientation = 2;
// dm->dmPrintQuality = 1200;
 PRINTDLG pd;
 {
  pd.lStructSize = sizeof(PRINTDLG);
  pd.Flags = PD_RETURNDC;
  pd.hDC = NULL;
  pd.hwndOwner = NULL;
  pd.hInstance = NULL;
  pd.nMaxPage = 256;
  pd.nMinPage = 1;
  pd.nFromPage = 1;
  pd.nToPage  = 256;
  pd.nCopies = 1;
  pd.hDevMode = dm;
  pd.hDevNames = NULL;
 }
 if(!PrintDlg(&pd))
 {
  return;
 }
 ASSERT(pd.hDC != NULL);
 
 CDC pDC;
 pDC.Attach(pd.hDC);
 int nHorRes = GetDeviceCaps(pd.hDC, HORZRES);//返回设备的物理显示宽度mm 
 int nVerRes = GetDeviceCaps(pd.hDC, VERTRES);//返回设备的物理显示高度mm
 
 if(pd.hDC != NULL)
 {
  DOCINFO di;   
  di.cbSize = sizeof(DOCINFO);  
  di.lpszDocName = "图象打印";
  di.lpszOutput = (LPTSTR)NULL;  
  di.lpszDatatype = (LPTSTR)NULL; 
  di.fwType = 0;
  pDC.StartDoc(&di); 知打印机驱动程序执行一新的打印任务  
  pDC.StartPage();   知打印机驱动程序打印新页  
  SetMapMode(pd.hDC, MM_TEXT);//设置当前影射模式为:单位0.001英寸
  CRect rectPrint(0, 0, nHorRes, nVerRes);  
  
  印图形
  BITMAPINFO* pbi = (BITMAPINFO*)GlobalLock(hDib);
  if (pbi != NULL)
  {
   BYTE* Data = (BYTE*)(pbi->bmiColors);
   if (pbi->bmiHeader.biBitCount <= 8)
   {
    int nColor = pbi->bmiHeader.biClrUsed
     ? pbi->bmiHeader.biClrUsed : (1<<pbi->bmiHeader.biBitCount);
    Data += sizeof(RGBQUAD) *nColor;
   }
   if (hPalette != NULL)
    SelectPalette(pd.hDC, hPalette, TRUE);
   StretchDIBits(pd.hDC, rectPrint.left, rectPrint.top, rectPrint.Width(),
    rectPrint.Height(), 0, 0, pbi->bmiHeader.biWidth,
    pbi->bmiHeader.biHeight, Data, pbi, DIB_RGB_COLORS, SRCCOPY);
   GlobalUnlock(hDib);
  }
  
  EndPage(pd.hDC); 知打印机驱动程序页结束  
  EndDoc(pd.hDC); 
  pDC.DeleteDC();
 }


延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网