Visual C++ 环境下轻松实现报表处理

QT报表选型(QT报表系列1) QT报表选型:QT中目前的主流报表框架:NCReport ,CuteReport,QtRPT,LimeReport等,由于NCReport 现在是商业版本,CuteReport,从2017年后就没再更新,所以我们重点介绍QtRPT和LimeReport这两个。 阅读详情

Visual C++ 环境下轻松实现报表处理
浙江省温岭电信局 王骏

本文适合读者层次:初级、中级

前言
  数据库在企业软件系统中应用广泛,而报表的显示与打印成为此类软件必备的功能。可惜VC++并没有集成报表处理工具,但其强大的功能再加上市面上功能完备的报表处理工具使这一工作变得容易,本文介绍了在VC++环境中利用Seagate公司的Crystal report(水晶报表)来实现报表的显示与打印,并提供示例代码。

一、准备工作
(1)安装Crystal Report软件
Crystal Report 4.6是一个免费的报表工具,可以在VB5或WINDOWS NT 4.0 BackOffice等光盘上找到,Crystal report4.6中包含了报表设计工具与报表打印控件。程序的发行只需要安装打印控件相关部分即可。
无法找到此软件的网友可以到VC知识库站点下载,网址为http://www.vckbase.com/ocx/report
(2)设计报表
我们生成一个名为sample.rpt的报表,这一过程可以参考 Crystal report自带的帮助文档,本文不作详细介绍。
本文示例代码中已经包含了此文件,您也可以直接下载已经做好的sample.rpt,点这里下载

二、创建VC工程添加报表控件

  在VC集成环境中用AppWizard新建一个MFC单文档工程,其余选项都为默认。菜单中选择Project->Add To Project->Components and Controls...弹出组件、控件选择对话框,进入Registered ActiveX Controls,选中Crystal Report Control 4.6 ,单击Insert按钮,确认后进入类配置对话框,按默认即可。关闭控件选择对话框完成控件的添加。

三、实现报表的显示与打印
下面我们将在对话框中演示控件的静态创建过程,在主视图中演示控件的动态创建过程。

3.1在对话框中打印出报表

在资源编辑器中打开ID为IDD_ABOUTBOX的对话框模板,在Controls工具条中我们可以找到刚加入到工程中的Crystal Report Control 4.6控件按钮,把它插入到对话框合适的位置处。
右键单击对话框中的控件,选择属性,此时可以设置控件的许多属性。我们在Control选项页ReportFileName中输入报表文件名sample.rpt(可以加上完整路径),在Print Window选项页中设置控件的合适位置,回到对话框模板中按住Ctrl键,双击鼠标左键,弹出Add Member Variable对话框,我们将成员变量命名为m_CrystalReport,打开ClassWizard,为CAboutDlg对话框添加WM_INITDIALOG消息的处理函数:BOOL OnInitDialog(),并在函数中做如下处理

BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
/////此行设置控件的父窗口,你也可以去掉该行看看运行效果/////////
m_CrystalReport.SetWindowParentHandle((long)(this->m_hWnd));
/////打印报表到窗口中/////
m_CrystalReport.PrintReport();
return TRUE;
}

至此,程序的第一部分编写完成,编译运行,打开About对话框看看效果吧!


哦!还不错!
假如您并没有显示出报表,有如下可能原因:
(1)控件没有放置在合适的位置或尺寸不对。
(2)报表文件本身存在诸如数据源不可用等错误。
控件窗口中的工具条提供了缩放、打印等功能,您也可以试试在打印机上打印出来的效果。

3.2 在程序主视窗中显示报表


打开ClassWizard增加对ID_FILE_OPEN和ID_FILE_PRINT的处理函数,代码如下


void CMyReportView::OnFileOpen()
{
char Filter[] = "Crystal Report files(*.rpt)|*.rpt|All files(*.*)|*.*||";
CRect rect;
CFileDialog OpenDlg(TRUE,0,0,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,(LPCTSTR)Filter,NULL);
if(OpenDlg.DoModal()!=IDOK) ///显示文件对话框
return;
CString m_fName=OpenDlg.GetPathName(); ///取得文件名
if(m_CrystalReport)
m_CrystalReport.DestroyWindow();
GetClientRect(rect);
///////////////////创建控件///////////////
if (!m_CrystalReport.Create(AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),WS_CHILD|WS_VISIBLE,rect,this,IDC_CRYSTALREPORT1))
{
AfxMessageBox("控件创建失败!");
return ;
}
m_CrystalReport.SetWindowParentHandle((long)(this->m_hWnd));///设置父窗口
m_CrystalReport.SetWindowBorderStyle(0); ///设置为没有边框
m_CrystalReport.SetWindowLeft(0); ///左空间
m_CrystalReport.SetWindowTop(0); ///顶部空间
m_CrystalReport.SetWindowControls(FALSE); ///不显示工具条
m_CrystalReport.SetReportFileName(m_fName); ///设置报表文件
m_CrystalReport.SetWindowWidth(rect.Width()); ///设置窗口宽度
m_CrystalReport.SetWindowHeight(rect.Height()); ///设置窗口高度
m_CrystalReport.SetFormulas(0, "Company=/"VC知识库/""); ///将报表中的Company变量的值设置为VC知识库
m_CrystalReport.SetDestination(0); ///设置输出对象是屏幕
m_CrystalReport.PrintReport(); ///显示报表
}

void CMyReportView::OnFilePrint()
{
if(m_CrystalReport && m_CrystalReport.GetReportFileName() != "")
{
m_CrystalReport.SetDestination(1); ///设置输出对象是打印机
m_CrystalReport.PrintReport(); ///打印
}
}


程序运行效果如下图


点这里下载示例代码

后记:我们利用Crystal Report 4.6在VC++环境下实现了报表处理,但Crystal Report 4.6报表控件的功能及可控性能可能无法满足
您的要求,Seagate公司此款软件的最新版本是Crystal Report 8.0,各方面表现都非常出色,但此款软件的免费版本并不包括报表设计器,可喜的是8.0中的报表显示控件兼容以前版本的报表格式,所以笔者建议用4.6版本来设计报表,依靠8.0中的报表显示控件来显示、打印。

--- www.vckbase.com ---

深入探索Visual C++开发环境 Visual C++是微软推出的一款功能强大的集成开发环境(IDE),主要面向使用C和C++语言进行开发的开发者。从早期的版本开始,Visual C++就以其高效的编译器、丰富的调试功能以及强大的项目管理能力,赢得了专业开发者的青睐。本章将为您概述Visual C++集成开发环境的核心特点和基本使用方法,以便您能快速地融入到Visual C++的开发世界中。 阅读详情

相关推荐

QtRPT:易于使用的打印报告库和设计器-开源

QtRPT是使用C ++ QtToolkit编写的易于使用的报表引擎。 它允许将多个报告合并到一个XML文件中。 对于单独使用的字段,您可以指定一些条件,具体取决于该字段将以不同的字体和背景颜色显示,等等。该项目由两部分组成:报表库QtRPT和报表设计器应用程序QtRptDesigner。 报告文件是XML格式的文件。 报表设计器使创建报表XML文件变得容易。

C++ 主流报表框架

朋友们,好久不见,十分想念 !今天分享一些 C++ 中的主流报表框架/库,也是我在项目中经常用到的,希望对大家有所帮助!报表框架有很多,商业版的、免费开...

青春不老,奋斗不止! 6495

用VC++实现通用的报表控件C++源代码程序小实例visual studio.net

用VC++实现通用的报表控件C++源代码程序小实例visual studio.net

Qt 开源项目收集大全

Qt 开源项目收集大全 阅读目录Qt官网下载/文档Qt-Installer-FrameworkQt知名社区pyQt VS pySide2Qt技术博客1Qt开源框架KDE/QtQt Github精品收藏1 -- IDEQt Github精品收藏2 -- framelessQt Github精品收藏3 -- RibbonQt Github精品收藏4 -- DockWidgetQt Github精品收藏5 - StudioQt Github精品收藏6

Snow__Sunny的博客 1万+

vs2010打印列表信息

vs2010环境下 用C++代码实现打印列表信息 已经验证 使用方法:1、将CPrintFrame和CPrintView类拷贝到工程所在目录,包括(PrintFrame.h,PringtView.h,PrintFrame.cpp,PrintView.cpp),并将这四个文件加入工程;引入头文件; 3、如果执行打印,加入执行打印代码,其他类似; 4、在对话框中响应?WM_BEGIN_PRINTING,?WM_END_PRINTING,WM_MY_PRINT消息,分别完成打印的初始化,释放和具体的打印操作;? 如在示例程序中添加了三个消息响应函数来执行该功能。? ON_MESSAGE(WM_BEGIN_PRINTING,OnBeginPrinting)? ON_MESSAGE(WM_END_PRINTING,OnEndPrinting)? ON_MESSAGE(WM_MY_PRINT,OnMyPrint) 注意:其中OnMyPrint是跟具体要打印什么内容有关的开发人员要重点完成的代码,可以打印表格,图片,数据,只要GDI绘图可以进行的操作在这里都可以完成。由于打印预览的一部分工作在CView类里完成,因此在用户程序中只需要相应WM_MY_PRINT消息就可以执行打印预览的功能,而不需要另外编写打印预览代码。 注:打印teechart控件暂时没有实现!

保姆级教程:用Anaconda+PyCharm搞定YOLOv8本地部署(附避坑指南)

本文提供了一份详细的YOLOv8本地部署指南,涵盖Anaconda环境配置、PyCharm集成到模型部署的全过程。特别针对国内开发者需求,整合了镜像加速和常见报错解决方案,帮助快速完成目标检测模型的本地部署与实战应用。

weixin_42528090的博客 433

Visual C++ 环境下轻松实现报表处理 (转)

Visual C++ 环境下轻松实现报表处理 (转)[@more@]Visual C++ 环境下轻松实现报表处理浙江省温岭电信局 王骏本文适合读者层次:初级、中级 前言数据库在企业软件系统中应用广泛,而报表的显示与打印...

circularr9834的博客 234

VBA中如何使用Edge内核Browser?

在微软宣布停止对IE的支持后,许多使用VBA中Web Browser的用户遇到了困境,因为Web Browser使用的IE内核。然而微软并没有给出支持Edge的新版Web Browser,网上许多第三方的库也不够完善。经过调研,libEdge可以较好的和VBA集成,实现在Excel中打开Browser,甚至能够通过执行js代码,获取web页面的信息。项目需要WebView2Loader.dll和LibEdge.dll两个库,区分x86和x64版本。

金木AI 2400

用Visual C++轻松实现报表处理

  前言  数据库在企业软件系统中应用广泛,而报表的显示与打印成为此类软件必备的功能。可惜VC++并没有集成报表处理工具,但其强大的功能再加上市面上功能完备的报表处理工具使这一工作变得容易,本文介绍了在VC++环境中利用Seagate公司的Crystal report(水晶报表)来实现报表的显示与打印,并提供示例代码。   一、准备工作  (1)安装Crystal Report软件Crystal

Tunix126的专栏 1028

QT快速配置MSVC2017编译环境(3分钟极简指南)

本文提供了一份3分钟极简指南,帮助开发者快速配置QT的MSVC2017编译环境。通过断网安装、精准勾选组件和配置QT Creator编译器路径等步骤,大幅提升QT开发效率。MSVC2017作为Windows平台高性能C++编译器,特别适合处理大型QT项目,编译速度优势明显。

weixin_30399821的博客 504

手把手配置:用Synopsys VDK为英飞凌TC4x系列MCU做虚拟原型开发

本文详细介绍了如何使用Synopsys VDK为英飞凌TC4x系列MCU进行虚拟原型开发,涵盖开发环境搭建、关键外设虚拟化配置、AUTOSAR栈集成及虚拟调试与性能调优全流程。通过虚拟原型技术,开发者可提前6-12个月启动软件开发,显著提升汽车电子项目的开发效率。

weixin_30606461的博客 292

在快马AI平台轻松解决Visual C++ Redistributable依赖难题

对于需要处理Windows系统依赖的开发者,这个方案既避免了手动配置环境的麻烦,又能确保终端用户的无缝体验。整个开发过程中最惊喜的是,当我对COM组件注册部分有疑问时,平台AI不仅给出了代码修正建议,还详细解释了不同Windows版本的行为差异。快马平台内置的网络请求模块简化了从微软服务器下载安装包的过程,自动选择对应系统架构的版本。最近在开发一个C++应用程序时,遇到了一个常见但棘手的问题:如何确保程序在没有安装Visual C++ Redistributable的电脑上也能正常运行。

JetRaven12的博客 710

企业数字化转型的 4A 架构指南:从概念解读到 TOGAF 阶段对应

4A企业架构是中国数字化转型实践中总结的简化框架,包含业务、应用、数据和技术四个架构层。它自上而下形成业务驱动应用的指导关系,自下而上构建技术支撑数据的实现路径,与国际标准TOGAF核心内容高度对应。该模型通过统一语言、战略对齐和系统梳理,有效连接业务需求与IT实施,已成为企业架构规划的实用工具。其分层结构清晰展示了从业务目标到技术落地的完整推导链,特别适合中国企业的数字化转型场景。

友莘居士的博客 2177

探秘 YAML-CPP:一个强大的C++ YAML解析库

YAML-CPP是一个开源的、用于C++编程语言的YAML解析和生成库。它的目标是提供一个易于使用的API,让开发者能够轻松地将YAML数据集成到他们的C++应用中。项目由Jason Beder开发并维护,其GitHub仓库为:。 ## 技术分析 YAML是一种人类可读的数据序列化语言,常被用于配置文件、数据存储和传输等场景。YAML-CPP提供了两种主要的方式来处理YAML数据: 1. *

gitblog_00035的博客 1207

机器视觉/将HIK海康面阵相机连接Halcon软件

本文简述了如何将海康面阵相机连接到Halcon软件中进行实时取图的过程。

Dahe.qu 4869

vasp和ms_武汉理工大学赵焱课题组开发脚本 MS建模一键获取VASP输入文件POSCAR

本文给大家推介并分享一个通过Materials Studio一键获取VASP输入文件POSCAR的脚本,xsd2pos.pl。此脚本是武汉理工大学首席教授赵焱在帮助学生解决VASP计算问题时编写,解决了其他间接非手动获取POSCAR存在的问题,同时也相较于其他方法更为便捷,相信会对从事VASP计算的同行们带来便利。赵焱老师怀着哺育天下学子的情怀,希望给大家分享一下。下文介绍一下它的使用方法以及它所...

weixin_39706367的博客 2288

用llama.cpp实战入门C++:Windows下从编译到CUDA加速

C++是一门强调内存控制与系统交互的编程语言,其核心在于理解编译构建、运行时依赖、指针与RAII等底层机制。llama.cpp作为纯C++实现的轻量级大模型推理框架,以约3万行聚焦代码提供了极佳的学习沙盒——它不抽象、不封装,让std::vector、struct、CMakeLists.txt、Visual C++ Redistributable等概念在真实报错与调试中自然浮现。通过在Windows 11下配置VS2022、编译CLI工具、启用CUDA加速及加载qwen3-embedding模型,学习者可同

weixin_30235225的博客 514

AI在电商中的搜索优化

自拟标题 《AI技术助力电商搜索优化:深度解析一线大厂面试题及算法编程实践》 概述 随着人工智能技术的不断发展,AI在电商搜索优化中的应用日益广泛。本文将围绕“AI在电商中的搜索优化”这一主题,介绍国内头部一线大厂如阿里巴巴、百度、腾讯、字节跳动等在面试中常见的AI相关面试题和算法编程题,并提供详尽的答案解

AI天才研究院 913

VC6解析JSON资源文件:轻松应对Visual C++ 6环境下的JSON处理挑战

VC6解析JSON资源文件:轻松应对Visual C++ 6环境下的JSON处理挑战 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 VC6 解析 JSON 资源文件是一个专为实现Visual C++ 6环境下JSON数据处理而设计的开源类库资源文件。它不仅提供了稳定的解析能力,还带来了易于上手的示例,让开发者能够快速掌握JSON的解析技巧,提高开发效率。 项目技术分析...

gitblog_06766的博客 579

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

yaml-cpp:3步让你的C++项目轻松玩转YAML配置管理 [特殊字符]

还在为C++项目中的配置文件解析而烦恼吗?🤔 每次看到那些复杂的XML或者自定义格式的配置文件,是不是觉得头大?今天我要给你介绍一个超级实用的工具——**yaml-cpp**,它能让你像读小说一样轻松处理YAML格式的数据! **yaml-cpp**是一个专门为C++开发者打造的YAML解析和生成库,完全遵循YAML 1.2规范。想象一下,你的配置文件可以写得像下面这样清晰: ```yaml

gitblog_00813的博客 1185

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

在快马平台上轻松构建依赖 Visual C++ Redistributable 的 C++ 应用

但在快马平台可以直接新建C++项目,系统已预置了最新版MSVC编译环境,省去了繁琐的安装配置过程。难点在于确保程序能在没有开发环境的Windows电脑上运行,这就涉及到Visual C++运行时库的依赖管理。实际使用中发现,对于这类小型C++工具,快马平台比传统开发流程节省了至少70%的环境配置时间。特别的是,平台会自动检测代码中使用的库函数,标记出需要哪些版本的VC++ Redistributable组件。不用折腾开发环境配置,专注业务逻辑的实现,还能自动解决最头疼的依赖问题,确实能提升开发效率。

GoldenleafRaven13的博客 855

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: 用InstallShield制作专业Windows安装软件
ren20
博客等级 码龄27年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值