既然我们已经介绍了 PDF 查看器应用程序的基础知识,那就让我们研究一下如何在 SWT 应用程序中集成和使用 ActiveX 控件。因为我们这里的目的是讨论 ActiveX 集成,所以我们将不研究如何创建独立的 SWT 应用程序以及如何在 Microsoft Windows 中使用 ActiveX 控件。
清单 1 概述了 PDFViewer 类的基本结构并演示了如何将 ActiveX 控件集成到 SWT 应用程序。
清单 1. PDFViewer 类
2 2 {
3 3 private OleControlSite site;
4 4 private OleAutomation auto;
5 5
6 6 public PDFViewer()
7 7 {
8 8 super(null);
9 9 this.addMenuBar();
10 10 }
11 11
12 12 protected ControlcreateContents(Composite parent)
13 13 {
14 14 Shell shell = this.getShell();
15 15 shell.setText("PDFViewer");
16 16 shell.setSize(500, 450);
17 17
18 18 OleFrame frame = new OleFrame(shell, SWT.NONE);
19 19
20 20 try
21 21 {
22 22 site = new OleControlSite(frame,SWT.NONE, "PDF.PdfCtrl.5");
23 23 auto = new OleAutomation(site);
24 24
25 25 ...
让我们逐步研究这一代码片段:
每次应用程序启动时,都会创建 PDFViewer 类的新实例。
如第 3 行和第 4 行所示,我们需要定义两个对象: OleControlSite 和 OleAutomation 。 OleControlSite 对象变量处理与 ActiveX 控件的交互。 OleAutomation 对象允许开发人员访问特性并执行 ActiveX 控件所提供的命令。
在第 18 行上,定义了 OleFrame 对象。该对象是 ActiveX 控件的容器,并管理该控件的生命周期。
在第 22 行上,通过使用两个参数来实例化 site 变量:第一个参数包含对 OleFrame 的引用,第二个参数包含标识 ActiveX 控件的字符串。程序标识符(可在 Windows 注册表中找到)在 Microsoft Windows 中唯一地标识该控件。
在第 23 行上,使用对 OleControlSite 变量的引用来实例化 site 变量。
选择 PDF 文档
在用户可以查看 PDF 文档之前,用户需要从其工作站选择 PDF 文档。下面 清单 2中的代码说明了为最终用户打开一个文件对话框所必需的对象和方法。
清单 2. OpenAction 类
2 1 public class PDFViewer extends ApplicationWindow
3 2 {
4 3 private OleControlSite site;
5 4 private OleAutomation auto;
6 5
7 6 public PDFViewer()
8 7 {
9 8 super(null);
10 9 this.addMenuBar();
11 10 }
12 11
13 12 protected Control createContents(Composite parent)
14 13 {
15 14 Shell shell = this.getShell();
16 15 shell.setText("PDF Viewer");
17 16 shell.setSize(500, 450);
18 17
19 18 OleFrame frame = new OleFrame(shell, SWT.NONE);
20 19
21 20 try
22 21 {
23 22 site = new OleControlSite(frame, SWT.NONE, "PDF.PdfCtrl.5");
24 23 auto = new OleAutomation(site);
25 24
26 25 ...
27
让我们简要地研究这一代码片段:
每当用户从菜单栏选择“Open...”时,都要执行第 13 行上的 run 方法。
如第 15 行和第 16 行所示,创建一个 FileDialog 对象。如 图 2 所示,该对象向用户显示一个本机文件对话框。
第 18 行构造一个字符串,该字符串包含 PDF 文档在用户工作站上的位置。
第 20 行将 window 对象的数据类型转换成 PDFViewer 对象。
第 22 行执行 loadFile 方法并传入所选 PDF 文档的位置。在接下来的几节中,我们将更详细地研究 loadFile 方法。
图 2. Open File 对话框