将 ActiveX 控件集成到 SWT 应用程序(2)
- UID
- 1066743
|
将 ActiveX 控件集成到 SWT 应用程序(2)
选择 PDF 文档在用户可以查看 PDF 文档之前,用户需要从其工作站选择 PDF 文档。下面 中的代码说明了为最终用户打开一个文件对话框所必需的对象和方法。
清单 2. OpenAction 类1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| 0 ...
1 public class PDFViewer extends ApplicationWindow
2 {
3 private OleControlSite site;
4 private OleAutomation auto;
5
6 public PDFViewer()
7 {
8 super(null);
9 this.addMenuBar();
10 }
11
12 protected Control createContents(Composite parent)
13 {
14 Shell shell = this.getShell();
15 shell.setText("PDF Viewer");
16 shell.setSize(500, 450);
17
18 OleFrame frame = new OleFrame(shell, SWT.NONE);
19
20 try
21 {
22 site = new OleControlSite(frame, SWT.NONE, "PDF.PdfCtrl.5");
23 auto = new OleAutomation(site);
24
25 ...
|
让我们简要地研究这一代码片段:
- 每当用户从菜单栏选择“Open...”时,都要执行第 13 行上的 run 方法。
- 如第 15 行和第 16 行所示,创建一个 FileDialog 对象。如 所示,该对象向用户显示一个本机文件对话框。
- 第 18 行构造一个字符串,该字符串包含 PDF 文档在用户工作站上的位置。
- 第 20 行将 window 对象的数据类型转换成 PDFViewer 对象。
- 第 22 行执行 loadFile 方法并传入所选 PDF 文档的位置。在接下来的几节中,我们将更详细地研究 loadFile 方法。
图 2. Open File 对话框
列出 ActiveX 的命令在讨论如何在查看器应用程序中显示 PDF 文档之前,了解在 Adobe Acrobat Reader Active X( PDF.PdfCtrl.5 )组件中实际上可以使用哪些命令是有用的。样本代码软件包包括了由 IBM 开发的类。该类列出了 ActiveX 控件所公开的所有公用命令。
要枚举用于 PDF.PdfCtrl.5 控件的命令,请在 PDFViewer 目录中执行下面的命令: ant activex 。
如果您的环境配置正确,那么您应当会看到类似于下面这样的内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| ...
[java]Functions for PDF.PdfCtrl.5 :
[java]METHOD (id = 2) :
[java] Signature : boolean LoadFile([] String fileName)
[java] Description : null
[java] Help File : null
[java]METHOD (id = 3) :
[java] Signature : void setShowToolbar([] boolean On)
[java] Description : null
[java] Help File : null
[java]METHOD (id = 4) :
[java] Signature : void gotoFirstPage()
[java] Description : null
[java] Help File : null
...
|
要查看用于任何其它 ActiveX 控件的命令,只要编辑包含在源代码中的 build.xml 文件,并用一些其它 ActiveX 的程序标识符替换该类的参数。下面的 Ant 目标说明了要插入控件的程序标识符的位置。
清单 3. 编辑 build.xml 文件1
2
3
4
5
6
7
8
9
10
11
12
13
| ...
<target name="activex" depends="package-common">
<java classname="Main" fork="true">
<jvmarg value="-Djava.library.path=${eclipse.dir}windows"/>
<classpath>
<pathelement location="${dist.dir}/pdfviewer.jar"/>
<fileset dir="${eclipse.dir}" includes="*.jar"/>
<fileset dir="${eclipse.dir}windows" includes="*.jar"/>
</classpath>
<arg value="<insert some program identifier>"/>
</java>
</target>
...
|
从该类输出的第一个命令是 LoadFile。让我们研究一下如何在 PDF 查看器应用程序中应用这个命令。
执行 ActiveX 命令一旦用户选择了一个 PDF 文档, PDFViewer 类就需要执行 ActiveX 控件中所公开的命令。下面 中的代码说明了使 ActiveX 控件装入用户所选的 PDF 文档所需的对象和方法。
清单 4. PDFViewer 类1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| 0 ...
1 public void showPdfControl()
2 {
3 site.doVerb(OLE.OLEIVERB_SHOW);
4 }
5
6 public void loadFile(String file)
7 {
8 showPdfControl();
9
10 int[] rgdispid = auto.getIDsOfNames(newString[]{"LoadFile"});
11 int dispIdMember = rgdispid[0];
12
13 Variant[] rgvarg = new Variant[1];
14 rgvarg[0] = new Variant(file);
15
16 Variant pVarResult =auto.invoke(dispIdMember,rgvarg);
17 }
18...
|
让我们研究这一代码片段:
- 用户选择 PDF 文件之后,执行第 6 行上的 loadFile 方法。
- 第 8 行调用 showPdfControl 方法。必须使用 doVerb 命令激活 ActiveX 控件之后,该控件在应用程序中才可见。在 Eclipse 网站上标题为“ActiveX Support In SWT”的文章中可以找到动词的完整清单和概述(请参阅 以获取该文章的链接)。
- 第 10 行到第 16 行调用 ActiveX 控件中的 LoadFile 命令。有关如何使用在这些行中用到的每个对象的更多信息,请参阅 中的链接以获取 org.eclipse.swt.ole.win32 JavaDoc。
运行 PDF 查看器应用程序要测试和运行 PDF 查看器应用程序,请完成下列步骤:
- 在将源代码解包的目录中执行下面这个命令: ant run 。
- 执行 Ant 脚本之后,应当会出现 PDF 查看器应用程序。
- 从 File 菜单选择“Open...”,以从工作站选择 PDF 文件。呈现所选的 PDF 文档。
结束语SWT 库向 Java 开发人员提供一种功能强大的机制,使 Microsoft Windows ActiveX 控件集成到高度交互的客户机端应用程序。有了 SWT 对 ActiveX 控件和 OLE 文档的支持,研究如何创建外观极棒的且集成了本机窗口小部件和组件的应用程序是令人激动的。 |
|
|
|
|
|