快速业务通道

集成Windows本地应用到Eclipse RCP程序中 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
用程序窗口中。

窗口大小的变化:当我们的 SWT 窗口的位置或大小发生变化时,我们要通知本地应用程序窗口改变它的位置或大小。

首先我们来看窗口的创建和销毁。我们需要监听 SWT 窗口的 Paint 事件和 Dispose 事件,在响应 Paint 事件中创建本地应用程序窗口,在响应 Dispose 事件中关闭本地应用程序窗口。需要注意的是,我们创建本地应用窗口可能需要花较长的时间,为了避免阻塞 UI 线程,我们将其放在一个线程中执行。如下面的清单所示:

public class NativeControl extends Canvas{   private int childWnd = 0}   private String startCommand = null}   private String wndClassName = null}   private boolean isCreatingNative = false}   public NativeControl(Composite parent, int style) {   super(parent, style)}   this.addPaintListener(new PaintListener(){    public void paintControl(PaintEvent arg0) {   this.addPaintListener(new PaintListener(){    public void paintControl(PaintEvent arg0) {    if(childWnd==0 && !isCreatingNative){     isCreatingNative = true}     Thread thread = new Thread(){     public void run(){     childWnd = ReparentUtil.startAndReparent(    NativeControl.this.handle,startCommand,wndClassName)}     }     }}     thread.start()}    }    }   })}    }   })}   this.addDisposeListener(new DisposeListener(){    public void widgetDisposed(DisposeEvent arg0) {    if(childWnd!=0){     OS.SendMessage(childWnd, OS.WM_CLOSE, 0, 0)}    }    }   });

集成Windows本地应用到Eclipse RCP程序中(6)

时间:2011-02-15 IBM 梁骞 李辉

在 paintControl(PaintEvent arg0) 函数中调用 ReparentUtil.startAndReparent(NativeControl.this.handle,startCommand,wndClassName) 来启动 Windows 应用程序并将应用程序窗口显示到 SWT 控件中。当 SWT 空间销毁的时候也要将 Windows 应用程序的窗口销毁。SWT 的 OS 类提供了 SendMessage 方法来实现将窗口销毁:OS.SendMessage(childWnd, OS.WM_CLOSE, 0, 0);childWnd 就是要销毁的窗口的句柄。

窗口焦点的控制和窗口的销毁比较类似,我们先监听父窗口的焦点事件,一旦获取焦点,我们将焦点设置到本地应用程序的窗口中。同时,我们需要加一个键盘事件监听器,这样当用户按“Tab”键时,焦点才能跳转到我们的父窗口控件。如下面的清单所示:

this.addFocusListener(new FocusListener(){    public void focusGained(FocusEvent arg0) {    if(childWnd!=0){     OS.SetForegroundWindow(childWnd)}    }    }    public void focusLost(FocusEvent arg0) {    }   })}   this.addKeyListener(new KeyListener(){    public void keyPressed(KeyEvent arg0) {    }    public void keyReleased(KeyEvent arg0) {    }   });

SWT 的 OS 类提供了 SetForegroundWindow 函数来将焦点设置到某个窗口上,函数的参数指定要设置焦点的窗口句柄。

窗口的大小的控制也是类似的。我们需要监听父窗口的窗口事件,一旦有窗口大小变化,我们就调整本地应用程序的窗口大小。

this.addControlListener(new ControlListener(){   public void controlMoved(ControlEvent arg0) {   }   public void controlResized(ControlEvent arg0) {   if(childWnd!=0){   Rectangle rect = ((C

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号