锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 外包精品 / 外包精品 / 图文混排FormView打印预览项目技术
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

图文混排FormView打印预览项目技术


1.简介

在VC6里,CFormView的外观和对话框CDialog差不多,上面可以直接放置各类子控件窗口,交互形式是以窗口模式进行。这和其它视图风格完全不一样。客户项目是一类医院的项目,想把CFormView子窗口里的图片和文字内容进行合理的预览和打印。
所见即所得预览和打印是窗体应用程序开发里经常用到的功能,也是一个不太容易掌握的功能,我们灵活使用了codeproject上提供的EasyReport开源项目,进行功能扩展,下面是实现特点:

  1. 实现了图文混排的预览和打印。
  2. 实现了根据打印纸宽度自适应的预览和打印。
  3. 预览框架和原有的CFormView不冲突。
  4. 系统地解决了CDC映射模式问题。
  5. 预览窗口功能完整。

下面是CFormView的显示截图:
显示
下面是预览的截图:

预览

2.代码移植说明

  1. 找到3张bmp格式图片放到当前工程目录下,其图片名分别为bitmap1.bmp, bitmap2.bmp,bitmap3.bmp.
  2. 移植过程:把CSampleReportView类,CMyFrame类,CEasyReport类添加到你想要的工程里,注意包含头文件。〈工程->添加到工程->文件->选择类的头文件和源文件,点添加即可。〉
  3. 假如你的工程名是Test,在应用程序类(就是CTestApp类的源文件里)的CSampleReportApp theApp;下面加入这2句CSingleDocTemplate* m_pTemplate;

BOOL m_bPrintPreview;
在CTestApp类的头文件里加入
extern CSingleDocTemplate* m_pTemplate;
extern BOOL m_bPrintPreview;在你的打印预览按钮的响应函数所在类的头文件里加入函数BOOL OnPreviewCreate();源文件中加入
BOOL CMainFrame::OnPreviewCreate()
{
CFrameWnd* pOldFrame=(CFrameWnd*)AfxGetThread()->m_pMainWnd;

if (!m_pTemplate)
{
m_pTemplate = new CSingleDocTemplate(
IDR_MENU1,
NULL,
RUNTIME_CLASS(CFrameWnd),
RUNTIME_CLASS(CSampleReportView));
AfxGetApp()->AddDocTemplate(m_pTemplate);
}

CFrameWnd * pFrameWnd =(CFrameWnd*) m_pTemplate->CreateNewFrame( NULL, NULL );
m_bPrintPreview=TRUE;

m_pTemplate->InitialUpdateFrame( pFrameWnd, NULL);

CSampleReportView* pView=(CSampleReportView*)pFrameWnd->GetActiveView();
//pView->m_pCtrl=this;byLB
pView->m_pOldFrame=pOldFrame;

AfxGetApp()->m_pMainWnd=pFrameWnd;
pFrameWnd->SetWindowText(_T("OilManager Print Preview"));
pFrameWnd->ShowWindow(SW_SHOWMAXIMIZED);
pView->OnFilePrintPreview();
return TRUE;
}
在打印预览的响应函数里加入:OnPreviewCreate()即可。

  1. 实现机制:子框架里用单文档模板创建视图的方法实现了基本打印框架。
  2. 打印预览内容的实现主要靠CEasyReport这个类提供的方法来实现的。
  3. 在CSampleReportView类的InitEasyReport函数里加预览内容定制
  4. 首先CSampleReportView类里添加一个CEasyReport的对象名为m_Report.通过个对象调用CEasyReport类提供的外部方法
  5. CEasyReport里的函数简介

(1)SetCompanyName(const char *inStr)设置预览时标题的名字,
使用方法:传入一个字符串即可。
例如:m_Report.SetCompanyName(”xyz”);就把预览时的标题名字设置成xyz了
(2)Start()函数指示了预览开始,在这个函数里做一些初始化工作,m_Report.Start()|这样就调用了。
(3) void SetDataCols(CColInfo *inCols = NULL, int nCols=0,bool bHideColName=false); 设置列的数目和宽度,第一个参数是一个结构体的指针,此结构体的初始化形式如下:
static CEasyReport::CColInfo s_ColsA[] = {
{"edit1", 27 CEasyReport::CColInfo::eLeft},
{"Edit1", 27 CEasyReport::CColInfo::eLeft},
{"edit2", 27 CEasyReport::CColInfo::eLeft},
{"Edit2", 27 CEasyReport::CColInfo::eLeft}
};
"edit1"这个代表的是列名,27代表的是列的宽度,CEasyReport::CColInfo::eLeft指的是左对齐。SetDataCols的第2个参数指的是结构体里项的数目。第3个参数是指 是否隐藏列名。当为TURE时隐藏列名,FALSE不隐藏列名。
使用示例:m_Report.SetDataCols(s_ColsA,4,TRUE);
(4)void AtTab(int,const char *,bool bHIdeBox=false,int iCustomHeight=0);
功能:设置某列的文本内容
参数简介:
第1个参数指的是要加入的列的索引(指的是CColInfo结构体里的项的索引值。)
第2个参数指的是要加入此列下的内容字符串。
第3个参数指是否显示文本外的矩形框,TRUE时不显示,FALSE显示。
第4个参数指此项的高度
int AtTab(int,CStringArray&);
功能:为预览添加子列
参数简介:
第1个参数指的是要加入的列的索引(指的是CColInfo结构体里的项的索引值。)
第2个参数指的是子列的内容

void AtTab(int,CString strPath,CWnd *pRc);
功能:为打印预览添加图片
参数简介:
第1个参数是指的是要加入的列的索引(指的是CColInfo结构体里的项的索引值。)
第2个参数是指图片的路径。
第3个参数是一个为了实现重载区分的指针(备用指针可为以后要获得某些控件的指针做准备)

  1. void NextRow(int iAdjustHeight=0,BOOL Showline=FALSE);

功能:移到下一行
参数简介:
第1个参数指的是移动的高度
第2个参数指是否显示横线,TRUE显示横线,FALSE不显示横线。
8.void GetGroupTopLeft(int index);
功能:获得某一时刻矩形左上角的坐标
参数简介:
CEasyReport类里的数据成员m_gRect矩形数组的中某一元素的索引
void GetGroupRightBottom(int index,BOOL bAdd=TRUE);
功能:获得某一时刻矩形右下角的坐标
参数简介:
第1个参数指CEasyReport类里的数据成员m_gRect矩形数组的中某一元素的索引
第2个参数指 是否获得右下角坐标 如果为FALSE 则不获得,反之,则获得。
int GetLastObjectRect(CRect & rectGet);
功能:获得最后对象一个矩形的值
参数简介:要获得的矩形的值
9. void End();
功能:预览结束
使用示例:m_Report.End();
10. void GotoPage(int inPage);
功能:预览界面跳转
参数简介:
要跳转到的页面的索引,为0时,跳转到第1个页面。
使用示例:m_Report.GotoPage(0);
(注意:当m_Report.SetCompanyName(”xyz”);调用后再调用m_Report.Start();
表示打印预览定制开始,m_Report.End();表示打印预览定制结束,在这2个函数(start和End函数)之间调用AtTab,NextRow等这些函数,在m_Report.End();语句后加m_Report.GotoPage(0);就可以了)

3.前景

此打印预览构架灵活,扩展能力强,欢迎相关单位进行报表相关外包项目合作。

友情链接
版权所有 Copyright(c)2004-2024 锐英源软件
统一社会信用代码:91410105098562502G 豫ICP备08007559号 最佳分辨率 1440*900
地址:郑州市金水区文化路97号郑州大学北区院内南门附近