集成 Windows 本地应用到 Eclipse RCP 程序中
2009-12-18 00:00:00 来源:WEB开发网窗口的创建:当我们 SWT 窗口创建时,我们需要将本地应用程序窗口创建出来
窗口的销毁:当我们 SWT 窗口销毁时,我们也要将本地应用程序窗口销毁。
焦点控制:当我们的 SWT 窗口获取到焦点时,我们要将焦点设置到本地应用程序窗口中。
窗口大小的变化:当我们的 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);
}
}
});
更多精彩
赞助商链接