快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
aitForSingleObject(hEvent,1000*60);

为了避免无限的等待下去,我们设置了一个最长的等待时间,为60秒。

下面我们再来看 ShellProc 的处理代码。这个函数中,我们主要是要获取应用程序的主窗口。根据 Windows 系统 WH_SHELL 钩子的定义,钩子的处理函数的第一个参数是事件类型,第二个参数是窗口句柄。我们首先判断窗口的类型是否是 HSHELL_WINDOWCREATED,然后判断对应窗口所属的进程号是否等于我们所启动的应用程序,如果需要还要判断窗口类型。一旦我们找到了应用程序主窗口,我们通过调用 SetEvent 来通知主进程继续执行。

LRESULT CALLBACK ShellProc(int nCode,WPARAM wParam,LPARAM lParam){   if(nCode==HSHELL_WINDOWCREATED && childInstanceId!=0){   HWND hwnd=HWND(wParam)}   DWORD pid}   HANDLE childEvent}   char classname[100]}   GetWindowThreadProcessId(hwnd,&pid)}   if(pid==childInstanceId){    if(wndClassName[0]!=0){    int count = GetClassName(hwnd,classname,100)}    classname[count] = 0}    if(strcmp(classname,wndClassName)!=0){     return CallNextHookEx(hHook, nCode,                wParam, lParam)}    }    }    hChildWnd = hwnd}    ShowWindow(hChildWnd,SW_HIDE)}    childEvent = OpenEvent(EVENT_ALL_ACCESS,          TRUE,TEXT("Global\WaitWindowCreatedEvent"))}    if(childEvent!=0){    SetEvent(childEvent)}    }   }   }   return CallNextHookEx(hHook, nCode, wParam, lParam)} }

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

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

将 Windows 应用主窗口设置成指定窗口的子窗口

获取应用程序的主窗口句柄之后,在 Java_com_reparent_ReparentUtil_startAndReparent 函数的最后,我们通过调用 Windows 的 SetParent 函数将其设置成我们的子窗口,同时调整一下应用程序窗口的大小以使其能刚好显示在我们的窗口中。为了避免窗口的闪烁,我们先将窗口隐藏,reparent 之后再显示。为了去掉应用程序的窗口栏,我们需要将应用程序的窗口类型改为 WS_POPUP。

if(hChildWnd!=0){   RECT rect}   GetWindowRect((HWND)hParentWnd,&rect)}   ShowWindow(hChildWnd,SW_HIDE)}   SetParent(hChildWnd,(HWND)hParentWnd)}   SetWindowPos(hChildWnd,(HWND)0,0,0,          rect.right-rect.left,rect.bottom-rect.top,    SWP_NOZORDER | SWP_NOACTIVATE | SWP_ASYNCWINDOWPOS |    SWP_SHOWWINDOW | SWP_NOSENDCHANGING | SWP_DEFERERASE)}   SetWindowLong(hChildWnd,GWL_STYLE,WS_POPUP)}   ShowWindow(hChildWnd,SW_SHOW)} }

包装 Windows 应用程序窗口到 SWT 控件

实现了 startAndReparent 方法后,只要将我们 SWT 窗口句柄传入,我们就可以将一个 Windows 本地应用嵌到我们的 SWT 窗口中了。为了方便使用,我们可以将 Windows 本地应用包装到一个 SWT Control 中,这样我们就可以象使用普通 SWT Control 一样使用 Windows 应用程序的窗口。下面我们来看如何实现对 Windows 应用程序窗口的包装。

首先我们定义一个 Control,它从 Canvas 继承而来。我们用它来作为本地应用程序窗口的父窗口,同时实现对它的管理。我们主要要实现以下几个方面的管理:

窗口的创建:当我们 SWT 窗口创建时,我们需要将本地应用程序窗口创建出来

窗口的销毁:当我们 SWT 窗口销毁时,我们也要将本地应用程序窗口销毁。

焦点控制:当我们的 SWT 窗口获取到焦点时,我们要将焦点设置到本地应

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号