如何在Windows中组合GUI应用程序

时间:2008-11-23 14:32:41

标签: windows qt winapi user-interface ipc

我有一个使用Qt框架的Windows GUI应用程序(目前版本为3.3.5,可能会更改为Qt4)。

我想在主应用程序中组合其他Windows GUI应用程序。由于我无法控制的几个约束,我不能直接在主应用程序中使用小部件。最终布局应如下所示:

http://i.stack.imgur.com/RlK7T.png

目前我正在使用Hosting .exe applications into a dialog中列出的方法。为了传递子应用程序的HWND,我在进程之间使用自己的IPC。然后,我需要使用在子窗口上调用resizeEvent的Qt ::MoveWindow来转发调整大小事件。

这样做有更好或更通用的机制吗?有人建议我使用ActiveX,但我对这项技术不够熟悉。

2 个答案:

答案 0 :(得分:4)

以下是一些Windows应用程序如何处理此问题:

如果小部件应用程序必须在其自己的EXE中,那么您可以使用OLE文档对象嵌入(我认为这是正确的术语)。这与用于将实时Excel文档嵌入Word文档的技术相同。基本上,跨进程使用类似WMF的数据来呈现UI。这需要主机和窗口小部件程序 中的大量工作,除非 您自动构建的框架。 MFC做得很好......(伙计,我只是赞美MFC吗?)

更好的解决方案是使用某种类型的进程内解决方案。让所有小部件都是DLL。这就是ActiveX的工作原理。如果小部件需要耗尽流程,请将渲染和进程外的东西分成两部分。一个EXE,它执行进程外的东西并在托管进程中进行本地呈现。使用某种类型的IPC将它们粘合在一起。

我怀疑“你无法控制的限制”将使几乎任何“理智”的实施变得不可能......

答案 1 :(得分:1)

HWND是Win32 GUI的最基本构建块。除此之外的任何事情都需要托管应用程序的合作。例如通过将父HWND发送到托管应用程序。