没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2006-01-18 09:42:00.000|阅读 1535 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
下载源代码
摘要
通过PDF控件做一个PDF格式电子图书浏览器,学习一类控件的使用方法。
关键词 PDF控件 电子图书浏览器 控件使用
首先声明,做这个PDF格式电子图书浏览器,其目的并不仅仅是教你如何做这个浏览器,而是教你如何正确使用控件进行编程。要提醒你的是,如果你想进行这个实验,那么你的机器上面必须安装有
Adobe Acrobat 4.0(或者更低版本),经笔者实验,Adobe Acrobat 5.0 和 Adobe Acrobat 6.0
所提供的控件都是无法添加到我们的工程中去的。
要新建一个基于对话框的工程。需要注意的是,一定要在第二步中选中ActiveX
Controls,否则在以后的步骤中还需要手动添加一些代码,挺麻烦的。下面的步骤按其默认既可。
在下面出现的对话框中,可以把附加的控件删除。
下面,我们要往项目里面加入PDF控件。Project- >Add To Project- >Components and Controls- >Registerded
ActiveX Controls,双击,在下面的控件窗口中找到"Acrobat Control
用于ActiveX",选择下面的按钮"Insert",下面点击确定,正确插入后,我们可以在下面的框架里看到"Acrobat Control for
ActiveX"然后"Close"。
为了能够利用这个刚刚加入的控件,我们还需要在"ResourceView"加入一个Menu(菜单),具体做法为"PdfReader
resource"右健选择"Insert",下面的就是新建一个"Menu"。但是,我们只是插入了这么个菜单,在程序中还是没有法调用的。这时返回到主对话框中,右健单击,选择"Properties"(属性),在"Menu"中选择刚才加入的Menu的ID。
现在,为了使我们的这个PdfReader工作,我们要在菜单中加入"打开",其ID可为ID_OPEN_PDFFILE,我们选择把"Pop-up"前的钩去除(注:如无说明,在菜单内加入其它选项,都是按照把"Pop-up"前钩去掉处理)。
下面要用到ClassWizard(类向导)为刚刚加入的ID映射函数OnOpenPdffile()。
此时需要在CPdfReaderDlg加入:
public:CPdf m_PdfFile;
响应ID_OPEN_PDFFILE"打开"代码:
void CPdfReaderDlg::OnOpenPdffile()
{
char szFileFilter[]="PDF File(*.pdf)|*.pdf|All
File(*.*)|*.*||";
CFileDialog FileDialog(true,"","",OFN_EXPLORER,szFileFilter,this);
if(FileDialog.DoModal()==IDOK)
{
CString FilePath=FileDialog.GetPathName();
m_PdfFile.LoadFile(FilePath);
}
}
因为在上面的代码中我们直接引用PDF控件所产生类的函数的LoadFile(),很显然我们需要在"PdfReaderDlg.h"中加入"#include "pdf.h"."也许心情迫切的你想编译现在的程序,行啊。运行一下,没有什么错误。选择"打开",找到具有".pdf"格式的文件,可是会出现系统的警告错误。是什么原因呢,请想一想啊。对,我们还没有给控件在对话框内分配其存在空间呢。下面就是我们要做的。
利用Classwizard(类向导),为WM_CREATE消息映射个函数OnCtreate().其代码如下:
int CPdfReaderDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
CRect rect;
GetWindowRect(&rect);
m_PdfFile.Create(NULL,WS_VISIBLE,rect,this,0);
return 0;
}
这时候你再编译,是不是可以观看PDF格式电子图书了?但是,细心的你,是不是发现,我们的窗口既没有最大化、最小化按钮,也不能在对话框边角位置拖动其大小。不用急,下面我们就准备做这些工作。
返回到主对话框,右键单击,选择"Properties"(属性),在"Styles"里"Border:"选择"Resizing",在"Minimize
box"和"Maximize box"前选择打钩。那么我们的问题就算解决了。
在下面的拖拉对话框大小的时候,你也许会发现,我们的阅读pdf电子图书那部分窗口却没有发生什么变化,是不是感到美中不足呢。对于这个问题,用一个函数就可以完美解决。我们需要用WM_SIZE映射一个函数OnSize()。
void CPdfReaderDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
m_PdfFile.MoveWindow(0,0,cx,cy); //我们就需要加入这么一行就行了。
}
在我们的菜单里就"打开"这么一个选择未免太单调,我们可以自己手动加入一些东西。比如,"上页""下页""首页""末页""退出",其对应ID分别为:ID_PREVIOUS_PAGE,ID_NEXT_PAGE,ID_FIRST_PAGE,ID_LAST_PAGE,IDCANCEL(这里要说的是,在其菜单属性里把"Pop-up"前钩去掉),其对应函数分别为:
void CPdfReaderDlg::OnFirstPage()
{
m_PdfFile.gotoFirstPage();
}
void CPdfReaderDlg::OnLastPage()
{
m_PdfFile.gotoLastPage();
}
void CPdfReaderDlg::OnNextPage()
{
m_PdfFile.gotoNextPage();
}
void CPdfReaderDlg::OnPreviousPage()
{
m_PdfFile.gotoPreviousPage();
}
void CPdfReaderDlg::OnCancel()
{
CDialog::OnCancel();
}
我们能不能控制PDF格式电子图书显示的大小呢,答案是肯定的。在菜单中加入"视图",其子项为"放大","缩小",对应ID为ID_CHANG_BIG,ID_CHANG_SMALL。相应函数可为:
void CPdfReaderDlg::OnChangBig()
{
i=i+50; //设定i的变化范围。你可以改变一下i每次变化的大小。
m_PdfFile.setZoom(i);
}
void CPdfReaderDlg::OnChangSmall()
{
i=i-50;
m_PdfFile.setZoom(i);
}
注意:要在PdfReaderDlg.cpp前面加上 int i=100; //初始化i的大小
当然,你也可以添加一个新的对话框 ,用来设定PDF格式电子图书显示的大小。新加一个对话框后,生成相应的类,如CFind。在新生成的对话框内添加"Static"和
"Edit"控件。见下表和图8: Static Text 控件 自定义大小:
Edit Box 控件 IDC_FIND
声明后,打开Classwizard(类向导),选择"Member Variables",选择"Add Variable",为IDC_FIND映射float类型变量m_find。
现在往菜单视图里加入"自定义大小",ID为ID_SET_SIZE,相应函数极其代码如下:
void CPdfReaderDlg::OnSetSize()
{
CFind getsize;
getsize.DoModal();
m_PdfFile.setZoom(getsize.m_find);
}
仅仅加入这些代码,还不行,在OSetSize()直接使用CFind,这个类还没有声明,因此我们需要在"PdfReaderDlg.h"里加入"Find.h".
如果考虑到"打印"的话,在菜单里加入"打印",ID为ID_PRINT_PDFFILE,映射对应函数:
void CPdfReaderDlg::OnPrintPdffile()
{
m_PdfFile.Print();
}
到此时,我们的这个PDF电子图书浏览器算是初具规模了。下面我们要添加一些小的功能。 比如在窗口栏内显示阅读PDF电子图书的名称。这项功能可在下面函数里添加:
void CPdfReaderDlg::OnOpenPdffile()
{ CString m_Caption; //新添加的一个变量,用于显示窗口标题
CString m_Word=" 现在正在观看:";//也是新添加的
char szFileFilter[]="PDF File(*.pdf)|*.pdf|All
File(*.*)|*.*||";
CFileDialog
FileDialog(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);
if(FileDialog.DoModal()==IDOK)
{ CString FileName=FileDialog.GetFileTitle();
m_Caption=m_Word+FileName;//CString类型的重载操作。
SetWindowText(m_Caption);//设置在窗口显示
CString
PathName=FileDialog.GetPathName();
m_PdfFile.LoadFile(PathName);
}
}
我们要对这个浏览器整容,我们要给对话框添加红色背景。 SetDialogBkColor(RGB(255,0,0) ); 把上面这句添加到InitInstance()里既可。我们运行出来的对话框左上角的那个系统默认图标,实在没有个性。好办,我们要换成我们喜欢的小图标。首先用鼠标选中,按"Delete"键删除系统默认ICO图标,然后在Menu上右键单击,选择"Insert",在下面的出现的对话框中选中"Icon",单击"Import"按钮选择你要插入的Icon图标。在新插入的Icon图标上单击右键,选择"Properties",把其ID修改为"IDR_MAINFRAME",现在运行一下,看看效果。
我们的程序到此算是告一段落了。下面我们要总结一下。我们从加入的"Acrobat Control 用于ActiveX"控件所产生的类"CPdf"引用的函数有:
BOOL CPdf::LoadFile(LPCTSTR fileName)
void CPdf::Print() //用于打印文件
void CPdf::setZoom(float percent)//设置页面的大小
void CPdf::gotoFirstPage()//到第一页
void CPdf::gotoLastPage()//到最后一页
void CPdf::gotoNextPage()//到下一页
void CPdf::gotoPreviousPage()//到上一页
这些函数相对于类"CPdf"来说,只是很少的一部分,下面就要看各位的努力去丰富我们的"PdfReader"浏览器了。因为,本文的目的,不仅仅是教会您如何做一个PDF浏览器,而是通过做这么个简易的浏览器,触类旁通。如果您仔细的阅读了本文,那么首先庆祝您现在利用FLASH控件"Shockwave
Flash Object ",Windows Media Player提供的"ActiveMovieObject Control"控件,还有RealOne
Player播放器提供的控件"RealPlayer G2 Control"(前提是你的电脑上面安装有RealOne)等一类控件可以自己制作完全属于自己的FLASH播放器,Windows
Media播放器,以及RealOne 播放器等。最后需要说明的是,关于添加控件,也可以在对话框内右键单击,选择"Insert ActiveX
Control",在下面出现的控件选择对话框里选择我们需要用到的控件既可。下面的步骤和我们在前面所介绍的步骤类似,在此不再介绍。至于,本文所牵涉到的源码,如果各位想参考的话,其下载地址为:
http://i8boy.go.nease.net/vccode/pdfreader.rar
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号