当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 报表输出轻松搞定

VC++
面试题目:猫吃老鼠问题的求解
一个最基本的有限元计算程序
简单的表达式求值
C程序移植到VC开发环境下
一个小语言的词法分析程序
A/B 向上取整的方法
马走日棋盘算法
一种随机抽题的简单算法
clone模式在平衡排序二叉树实现中的应用
递归的应用 -- 最简单分形图形实现
比较数据排序前后的查找次数
根据前序和中序序列生成二叉树
如何用CZip/CUnzip类压缩/解压缩文件
使用 random_shuffle() 算法随机化序列元素
Ceb解除打印屏蔽实战
基于SHA-256的HMAC文件校验器
模拟信息加密流程图简介
关于数据校验
浅谈利用RSA算法防止非法注册机的制作
加密它:用新的高级加密标准(AES)保持你的数据安全

VC++ 中的 报表输出轻松搞定


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 59 ::
收藏到网摘: n/a

报表输出轻松搞定

作者:一行代码

下载源代码

一、刚刚开发了一个报表输出的 COM,可以动态的添加数据。代码没有限制,可随意使用。现在还在修改一些细节的地方,修改后会再次上传。

二、代码说明
1、首先注册COM控件 使用regsvr32命令
2、在stdafx中加入#import ".\YTReport.tlb"\ rename_namespace("TestYTReportDriver")using namespace TestYTReportDriver;
3、在APP文件中加入CoInitialize(NULL);和CoUninitialize();用于初始化COM环境和释放环境
4、建立变量IYTReportAPtr m_YTPrint;
初始化:
m_YTPrint = NULL;if (FAILED(m_YTPrint.CreateInstance(__uuidof(YTReportA)))){ MessageBox("清先注册COM","提示");}
5、程序可以输出双联表和普通模式
普通模式分为正表和反表两种
6、当然程序推出时别忘了释放对象
m_YTPrint.Release();
三、图像



第一个表格使用SetReportHeadA实现
第二个表格使用SetReportHeadB实现
第三个表格使用SetReportHeadC实现
-----------------------------COM接口标示------------------------------------------------
//准备打印
HRESULT PrePrint([out,retval]long *pRet);
----------------------------------------------------------------------------------------
//设置主标题
HRESULT SetTitleA([in]BSTR MyTitle,[out,retval]long *pRet);
----------------------------------------------------------------------------------------
//设置副标题
HRESULT SetTitleB([in]BSTR MyTitle,[out,retval]long *pRet);
----------------------------------------------------------------------------------------
//strReportHead"列名|对齐方式(m,l,r)|该列宽度(以一个数字的宽度为单位)|..."
//注:该字串最后不以"|"结尾。
HRESULT SetReportHeadA([in]BSTR strReportHead,[out,retval]long *pRet);
----------------------------------------------------------------------------------------
//strReportHead:"项目名|项目名|..." (各统计项名称)
// ColWide:统计项对应列的宽度
// ColNum:表格所含列数
//注:字串SubItemName最后不以"|"结尾。
// 采取自动与第一个表宽度对齐的机制。
HRESULT SetReportHeadB([in]BSTR strReportHead,[in]int ColWide,[in]int ColNum,[out,retval]long *pRet);
----------------------------------------------------------------------------------------
//相当于反表,数据为一列一列的填
//strReportHead:"行名|行名|..."
// otherColWide:第一列的宽度(写行名的那列)
// ColWide:其它列的宽度
//注:字串strReportHead最后不以"|"结尾。
HRESULT SetReportHeadC([in]BSTR strReportHead,[in]int ColWide,[in]int otherColWide,[out,retval]long *pRet);
----------------------------------------------------------------------------------------
//相当于反表,数据为一列一列的填
//strReportHead:"行名|行名|..."
// otherColWide:第一列的宽度(写行名的那列)
// ColWide:其它列的宽度
//注:字串strReportHead最后不以"|"结尾。
HRESULT SetReportHeadD([in]BSTR strReportHead,[in]int ColWide,[in]int otherColWide,[out,retval]long *pRet);
----------------------------------------------------------------------------------------
//加入记录
HRESULT AddDetail([in]BSTR strItem,[out,retval]long *pRet);
----------------------------------------------------------------------------------------
//写文本,数字,注释等东东
HRESULT WriteText(BSTR strText, long *pRet);
----------------------------------------------------------------------------------------
HRESULT Print([out,retval]long *pRet);
----------------------------------------------------------------------------------------
//设置表的序号
HRESULT SetTableNo([in]BSTR strTableNo,[out,retval]long *pRet);
----------------------------------------------------------------------------------------
//强行分页
HRESULT NewPage([out,retval]long *pRet);
----------------------------------------------------------------------------------------
//双联表
HRESULT DrawDoubleTable([in]BSTR strTableOName,[