分类: C/C++
2009-06-09 14:21:23
(1)把控件pdf.ocx加入VC项目,并生成控件类
(2)把控件放置在对话框上,或者调用控件类的成员函数Create创建控件对象
(3)调用控件的属性或方法打开PDF文件
由于这不属于本文要讨论的内容,详情请参考《Visual ++技术内幕》中“使用ActiveX控件”一章,这里不再赘述。
但是对于新版软件(5.x/6.x/7.x),上述方法不再适用:新版控件不是一个完整意义上的ActiveX控件,它缺少生成控件类所必需的类型库信息,无法把控件加入VC项目。
在这种情况下,需要调用函数CWnd::CreateControl来创建控件对象,然后获取控件的IDispatch接口指针,通过该指针访问控件的属性及方法。
直接用IDispatch指针调用控件的属性及方法是一件极其繁琐的工作,好在新版软件提供了类型库,可以用它生成一个自动化组件驱动类(从COleDispatchDriver派生)。借助该类,可以大大简化对控件属性及方法的调用。
虽然可以用控件显示PDF文件,但它只是一个代理,真正的工作还是由Acrobat(Reader)完成的,因此必须安装这两种软件中的一个。
实现步骤
以下以Acrobat(Reader)5.x/6.x为例,介绍如何用新版控件实现PDF文件的显示。
运行VC,新建一个基于对话框的MFC应用程序ViewPDF,在设置生成选项时,选中“ActiveX Controls”,其余使用缺省值即可。生成后,删除对话框中的所有控件。
接下来创建自动化组件驱动类:打开类向导,点击“Add Class”按钮,在弹出的菜单中选择“From a type library”,用类型库文件pdf.tlb产生所需的组件类,该文件位于Acrobat软件安装目录下的ActiveX子目录。
编辑ViewPDFDlg.h,为类CViewPDFDlg添加两个数据成员: #include \"pdf.h\" // 组件类的头文件
在类成员函数CViewPDFDlg::OnInitDialog中插入下列语句: // 为主窗口添加WS_CLIPCHILDREN风格,否则控件显示不正常
编译运行程序,选择要显示的PDF文件。
对于Acrobat(Reader)7.x,实现步骤基本与上相同,区别在于:
(1) 使用AcroPDF.dll生成自动化组件驱动类,得到的类名为IAcroAXDocShim,头文件为acropdf.h.
(2) 创建控件窗口时,类ID为AcroPDF.PDF.1.
除了上面用到的LoadFile外,控件还提供了许多有用的方法,常见的有:
Print 打印文件setZoom 设置页面的百分比setShowToolbar 显示/隐藏工具栏gotoFirstPage 跳转到第一页gotoLastPage 跳转到最后一页gotoNextPage 跳转到下一页gotoPreviousPage 跳转到上一页
由于用法很简单,这里不再一一叙述。