VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
Mschart控件图象打印处理

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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); file://通知打印机驱动程序执行一新的打印任务  
  pDC.StartPage();   file://通知打印机驱动程序打印新页  
  SetMapMode(pd.hDC, MM_TEXT);//设置当前影射模式为:单位0.001英寸
  CRect rectPrint(0, 0, nHorRes, nVerRes);  
  
  file://打印图形
  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); file://通知打印机驱动程序页结束  
  EndDoc(pd.hDC); 
  pDC.DeleteDC();
 }




相关文章

相关软件