`

使用Eclipse RCP进行桌面程序开发(四):在Windows中使用Active X控件

    博客分类:
  • RCP
阅读更多
使用Eclipse RCP进行桌面程序开发(一):快速起步
使用Eclipse RCP进行桌面程序开发(二):菜单、工具栏和对话框
使用Eclipse RCP进行桌面程序开发(三):视图和透视图

看完这篇文章,可以开发如下的界面:

没有嵌入Active X控件的视图:


嵌入浏览器控件,并显示www.blogjava.net的主页:


在Windows系统下,OLE和Active X控件是两个非常吸引人的技术,它们的基础都是COM。OLE的体验,就是平时我们可以把Excel表格嵌入Word文档,或者把PDF嵌入浏览器显示一样,而Active X控件更是无处不在,做VB开发和网页开发的人都应该很熟悉。使用Windows系统中丰富的Active X控件资源,我们可以实现功能非常强大的程序。

在Windows平台下,SWT图形工具包提供了对OLE的支持,Active X控件和OLE文档都可以被很方便地嵌入SWT窗口部件或者JFace部件,在这里,我只讨论将Active X控件插入视图。

在一个视图中包含一个Active X控件需要两个对象的支持,即一个OleFrame和一个OleClientSite对象。如果需要创建一个OLE应用,需要先后创建他们。创建OleFrame对象比较简单,OleFrame类定义在org.eclipse.swt.ole.win32中,创建OleFrame对象只需要简单的new就可以,如下:
1OleFrame frame = new OleFrame(parent, SWT.NONE);在这个构造函数中,第一个参数指的是该OleFrame的母窗口部件,即Active X控件将要被嵌入的窗口部件。

在OleFrame的基础上就可以创建OleClientSite对象,创建该对象需要知道控件的programID,这个ID的信息存放在windows的注册表中。在我们这篇文章的例子中,我们使用的是一个浏览器控件,那么我们怎么知道浏览器控件的ProgID呢?我使用的是Visual Studio 2003自带的OleView工具,如下图:


可以看到,Microsoft Web 浏览器的ProgID为Shell.Explorer.2,我们可以这样创建OleClientSite对象:
1OleClientSite client = new OleClientSite(frame,SWT.NONE,"Shell.Explorer.2");
创建对象后,还需要激活,才能够在RCP程序中对这些OLE对象进行操作。如下:
client.doVerb(OLE.OLEIVERB_SHOW);
然后,我们需要操作这个Active X控件,调用它的方法,或者设置它的属性。比如在此例中,我们需要调用浏览器控件的navigate方法,以便我们的浏览器控件显示www.blogjava.net的主页。对Active X控件的操作通过OleAutomation对象来实现,创建OleAutomation对象的方法如下:
OleAutomation automation = new OleAutomation(client);再通过automation.invoke()来调用Active X控件的方法,其中invoke方法有几种重载形式,有只带一个int参数的,也有带int和Variant[]两个参数的,其中的int参数表示要调用的Active X控件的方法的ID,Variant[]参数就是要传递给Active X控件的方法的参数。

这里我们要说一说Variant类,这个类提供了多个构造函数,可以方便的将int,float,long,double,string等等基本数据类型封装为Variant,比如我们要传递给浏览器控件的navigate方法的地址参数:
Variant url = new Variant("http://www.blogjava.net");
那么我们怎么才能得到Active X控件的方法的ID,还有它需要哪些参数呢?还是要借助前面提到的OleView.exe工具,如下图:





可以看到,Navigate方法的id为0x00000068,转化为十进制就是104,而它需要的参数第一个是一个字符串,其它的都是可选的,因此,我们可以这样调用它的方法:
Variant url = new Variant("http://www.blogjava.net/");
automation.invoke(104, new Variant[]{url});
下面,贴出本文例子中的视图的代码和菜单Action的代码,在写这篇文章之前,我一直在探索怎样从菜单控制视图,后来发现是这样:
window.getActivePage.getViewReferences();
虽然我不知道Eclipse中Page的概念究竟是什么,但是只要能找到我要操作的视图就可以了。视图的代码如下:

OleView.java
1package cn.blogjava.youxia.views;
2
3import org.eclipse.jface.action.IMenuManager;
4import org.eclipse.jface.action.IToolBarManager;
5import org.eclipse.swt.SWT;
6import org.eclipse.swt.widgets.Composite;
7import org.eclipse.ui.part.ViewPart;
8import org.eclipse.swt.ole.win32.OleFrame;
9
10public class OleView extends ViewPart {
11    public OleFrame frame;
12
13    public static final String ID = "cn.blogjava.youxia.views.OleView"; //$NON-NLS-1$
14
15    /** *//**
16     * Create contents of the view part
17     * @param parent
18     */
19    @Override
20    public void createPartControl(Composite parent) {
21        frame = new OleFrame(parent, SWT.NONE);
22       
23        //
24        createActions();
25        initializeToolBar();
26        initializeMenu();
27    }
28
29    /** *//**
30     * Create the actions
31     */
32    private void createActions() {
33        // Create the actions
34    }
35
36    /** *//**
37     * Initialize the toolbar
38     */
39    private void initializeToolBar() {
40        IToolBarManager toolbarManager = getViewSite().getActionBars()
41                .getToolBarManager();
42    }
43
44    /** *//**
45     * Initialize the menu
46     */
47    private void initializeMenu() {
48        IMenuManager menuManager = getViewSite().getActionBars()
49                .getMenuManager();
50    }
51
52    @Override
53    public void setFocus() {
54        // Set the focus
55    }
56
57}
58
在这个视图中,我创建了OleFrame对象,并让它是public的,至于OleClientSite和OleAutomation对象,我们在点击菜单项后创建。菜单动作的代码如下:

OpenFileAction.java
1package cn.blogjava.youxia.actions;
2
3
4import org.eclipse.jface.action.IAction;
5import org.eclipse.jface.viewers.ISelection;
6import org.eclipse.swt.SWT;
7import org.eclipse.swt.ole.win32.OLE;
8import org.eclipse.swt.ole.win32.OleClientSite;
9import org.eclipse.ui.IWorkbenchWindow;
10import org.eclipse.ui.IWorkbenchWindowActionDelegate;
11import org.eclipse.ui.*;
12import cn.blogjava.youxia.views.*;
13import org.eclipse.swt.ole.win32.OleAutomation;
14import org.eclipse.swt.ole.win32.Variant;
15
16public class OpenFileAction implements IWorkbenchWindowActionDelegate {
17
18    IWorkbenchWindow window;
19   
20    public void dispose() {
21        // TODO 自动生成方法存根
22
23    }
24
25    public void init(IWorkbenchWindow window) {
26        // TODO 自动生成方法存根
27        this.window = window;
28
29    }
30
31    public void run(IAction action) {
32        // TODO 自动生成方法存根
33       
34        IViewReference[] vfs = window.getActivePage().getViewReferences();
35        IViewPart vw;
36        for(int i=0; i<vfs.length; i++){
37             vw = vfs[i].getView(false);
38             if(vw.getTitle().equals("使用Active X控件")){
39                    OleClientSite client = new OleClientSite(((OleView)vw).frame,SWT.NONE,"Shell.Explorer.2");
40                    client.doVerb(OLE.OLEIVERB_SHOW);
41                    OleAutomation oa = new OleAutomation(client);
42                    Variant str = new Variant("http://www.blogjava.net/");
43                    oa.invoke(104, new Variant[]{str});
44       
45             }
46        }
47       
48    }
49
50    public void selectionChanged(IAction action, ISelection selection) {
51        // TODO 自动生成方法存根
52
53    }
54
55}
56
根据前面几节将的内容配置plugin.xml和修改Perspective.java的代码,就可以看到文章开头的效果了。


评论
# re: 使用Eclipse RCP进行桌面程序开发(四):在Windows中使用Active X控件  回复  更多评论   
2007-08-14 14:48 by 同声翻译公司
报考条件、考试程序及招生情况

  口译专业属应用类研究生,考试不同于其他专业,具有很强的实践性。据笔者了解,入学考试多不开列参考书目,笔试也不考理论知识。笔试内容多为段落改写、填空、写作、英汉双向笔译、综合知识测试等实际操作的内容。这些全靠考生平时的知识积淀和能力培养。

  该考试另外一个特殊性是该专业录取时以考生的复试成绩为主。上海外国语大学翻译学院院长柴明熲教授告诉笔者,学员在入学考试时除了要通过笔试外,口试即复试是选拔人才的重中之重。只有在复试中才能对英文听力理解和口语表达能力进行客观的考查。

  据了解,北外的复试包括:

  1.视译:将一篇英文稿口头翻译成汉语。

  2.复述:先听两遍英文录音(时间:3—5分钟,可作笔记),再将听到的内容用英文复述一遍。

  3.面试。

  上外复试包括:

  1.演讲:从考试委员会提供的若干题目中挑选其中之一,作2—3分钟的即兴演讲。

  2.复述:听1—2分钟的演讲,然后以另一种语言用自己的话复述演讲内容。

  3.视译:听一篇短文,浏览该文1分钟,然后将其内容口头译出。

  4.问答与对话。

# re: 使用Eclipse RCP进行桌面程序开发(四):在Windows中使用Active X控件  回复  更多评论   
2008-05-08 14:42 by hello
尊敬的博主,你好!

本人想在view中以ole或 activex方式使用word的 插入->对象。。。功能,即点击view中一个按钮,其响应的事件是弹出word中的一个功能界面(即word的插入->对象。。。点击所出来的界面 ),然后选中某个对象(如一个图片对象)后,让它显示在我的view中的image控件上。不知道此功能能否实现,该如何去做?
另外还有一个怪现象想请教博主:
1 本人的RCP项目名在开机后出现报错(红叉),但结果都可以运行出来,无任何错误信息显示于控制台。(不知道是否与我前天晚上突然断电有关)
2 我修改程序,在主菜单上加一个新的菜单项,但运行结果始终出不来,也无报错提示(包名上的错误依旧),但导出产品后运行产品则出现正确的结果,即:菜单项出现。请问这是什么原因啊?该如何解决次问题?
多谢指点了!!不甚感激!!
emaiL:ljju123@163.com

分享到:
评论

相关推荐

    使用Eclipse RCP进行桌面程序开发

    ### 使用Eclipse RCP进行桌面程序开发:详细指南 #### 一、Eclipse RCP简介与快速起步 **Eclipse RCP** (Rich Client Platform) 是一种基于Java的开源框架,用于开发桌面应用程序。自从Eclipse 3.0版本以来,RCP...

    Eclipse的RCP开发的入门教程

    "使用Eclipse RCP进行桌面程序开发(四):在Windows中使用Active X控件 .doc"针对Windows平台,介绍了如何集成ActiveX控件到RCP应用中,使开发者可以利用这些现成的组件扩展应用程序的功能。 "使用Eclipse RCP进行...

    使用EclipseRCP进行桌面程序开发(四):在Windows中使用ActiveX控件

    看完这篇文章,可以开发如下的界面:没有嵌入ActiveX控件的...使用Windows系统中丰富的ActiveX控件资源,我们可以实现功能非常强大的程序。在Windows平台下,SWT图形工具包提供了对OLE的支持,ActiveX控件和OLE文档都

    eclipse RCP Plug-in开发自学教程.pdf

    eclipse RCP(Rich Client Platform)是一种基于eclipse的插件式开发平台,允许开发者使用eclipse结构风格设计弹性的可扩展的应用程序。RCP插件式开发方式可以重用eclipse中的方法和编码模式,提高开发效率和代码...

    eclipse 开发桌面程序

    ### Eclipse 开发桌面程序——基于SWT技术及WindowBuilder插件详解 #### 一、SWT技术概述 SWT(Standard Widget Toolkit)是IBM Eclipse项目的一部分,作为一个强大的GUI编程框架,SWT为开发者提供了丰富的组件和...

    Eclipse RCP(富客户端平台)开发中文语言包_3.6.0.rar

    Eclipse RCP(Rich Client Platform)是Eclipse IDE的一个核心组成部分,它提供了一个框架和工具集,用于构建桌面应用程序。Eclipse RCP允许开发者利用Java和SWT(Standard Widget Toolkit)构建功能丰富的、可定制...

    ECLIPSE+RCP应用系统开发方法与实战(PDF 高岗著)

    《ECLIPSE+RCP应用系统开发方法与实战》这本书是高岗先生关于使用Eclipse RCP(Rich Client Platform)进行应用系统开发的一本实战指南。Eclipse RCP是Eclipse IDE的一部分,它提供了一个框架,使得开发者可以构建...

    rcp学习好资料

    2. **使用Eclipse RCP进行桌面程序开发(四):在Windows中使用Active X控件 - 海边沫沫 - BlogJava.mht** 在Windows平台上,Active X控件可以提供额外的功能,如访问硬件设备或使用特定的软件服务。这篇文档可能...

    eclipse rcp应用系统开发方法与实战源代码.zip

    通过这个压缩包中的教程和源代码,开发者不仅可以学习到Eclipse RCP的基本概念,还能掌握实际的开发技巧,从而构建出功能完善的桌面应用程序。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。

    Eclipse Rcp 桌面程序开发

    Eclipse Rcp 桌面程序开发中文教程

    使用EclipseRCP进行桌面程序开发(一):快速起步

    火龙果软件工程技术中心 所谓RCP,就是...使用RCP,我们可以开发界面象Eclipse这样漂亮的桌面程序,比如医院管理系统啊、CAD软件等等。遗憾的是,目前在国内基本上找不到关于RCP的中文资料,我们只能通过自

    Eclipse RCP.pdf清晰版

    通过以上介绍,我们可以看到Eclipse RCP是一个非常强大且灵活的框架,它不仅能够加速桌面应用程序的开发,还能让开发者专注于业务逻辑而不是繁琐的界面设计。对于希望利用Eclipse平台构建复杂应用的开发者来说,掌握...

    使用EclipseRCP进行桌面程序开发(二):菜单、工具栏和对话框

    火龙果软件工程技术中心 在使用EclipseRCP进行桌面程序开发(一):快速起步中,我们通过Eclipse的插件开发向导,逐步建立了一个RCP应用程序,但是,这个程序没有任何功能,难以激起我们学习的兴趣。在这一节,我们...

    EclipseRCP教程

    在本教程中,我们将详细介绍 Eclipse RCP 的开发过程、技术要点和注意事项,以帮助开发者快速掌握 Eclipse RCP 的开发技术。 一、Eclipse RCP 的技术要点 Eclipse RCP 的核心技术包括: 1. SWT(Standard Widget ...

    Eclipse4 RCP桌面应用开发教程

    Eclipse4的插件开发教程比较少,之前搜索到的基本是eclipse官网的全英文版本,可能现在做桌面应用的没那么多,搜索到的都是多年前的资料。英文的看的比较吃力,分享一个中文的,部分内容还是有英文,大部分都已经...

    EclipseRcp 例子程序

    Eclipse RCP(Rich Client Platform)是一个开源框架,由Eclipse基金会开发,用于构建桌面应用程序。这个框架基于Java,提供了一套完整的工具集,包括插件系统、工作台管理、视图、编辑器、透视图等,使得开发者可以...

    Eclipse RCP 插件开发指南

    Eclipse RCP 是一个灵活的平台,它提供了构建桌面应用程序所需的所有组件和服务。通过使用Eclipse RCP,开发者可以创建高度可定制和扩展的应用程序,这些应用不仅具有强大的功能,而且还能与其他Eclipse插件无缝集成...

    开发您的第一个 Eclipse RCP 应用程序

    ### 开发您的第一个 Eclipse RCP 应用程序 #### 富客户端平台 (RCP) 概述 **Eclipse Rich Client Platform (RCP)** 是一个强大的框架,旨在利用 Eclipse 平台来构建非集成开发环境 (IDE) 类型的最终用户应用程序。...

    Eclipse RCP 应用系统开发方法与实战

    Eclipse Rich Client Platform (RCP) 是一个强大的框架,用于构建桌面应用程序。它基于Java,提供了丰富的用户界面组件和插件机制,使得开发者能够构建功能丰富的、可扩展的应用程序。"Eclipse RCP 应用系统开发方法...

Global site tag (gtag.js) - Google Analytics