c++ win32 嵌入式 3rd 方应用程序

Posted

技术标签:

【中文标题】c++ win32 嵌入式 3rd 方应用程序【英文标题】:c++ win32 embeded 3rd party application 【发布时间】:2015-07-29 14:03:44 【问题描述】:

我想在我的主窗口中打开第 3 方应用程序,例如 office 或 adobe reader。

类似的东西。这个例子是在 windows 窗体中。 Embeded application

但我只能将纯 c++ 与 winapi 一起使用。是否可以?我能用它做什么。可以举个例子吗?

谢谢

【问题讨论】:

除非准备好将应用程序托管在另一个窗口中,否则您无法安全地执行此操作。您命名的所有应用程序都没有为此做好准备。 我知道 Windows 中的 MDI,它允许在 MDI 客户端窗口中创建子窗口。但除了虚拟化,我不知道如何强制应用程序的***窗口成为子窗口。也许您可以尝试创建一个窗口站或只是一个桌面,并将您的窗口用作它的包装器。或者您可能只需要非常更简单的 OLE,即使已经很棘手。目前您的问题(包括示例)是unclear 【参考方案1】:

您可以通过识别要嵌入的应用程序的窗口句柄 (HWND) 来做到这一点。然后,您可以使用 Window API 的 SetParent 函数将该窗口重新设置为宿主窗口。窗口句柄是 32 位的,因此即使在 32/64 位进程之间也可以使用。

但应注意将事件从主机应用程序正确分派到嵌入式窗口(例如,在重新调整大小或隐藏主机时,嵌入式窗口也应重新调整大小或隐藏)。并将嵌入式窗口定位在主机内。

Here is an example of this approach

这可能适用于记事本,但更复杂的应用程序在重新设置为另一个进程窗口时可能会出现奇怪的行为,但您可以进行试验。

【讨论】:

以上是关于c++ win32 嵌入式 3rd 方应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Visual C++:插件 DLL 使用的第 3 方 DLL 的位置?

带有插件、dll 和 3rd 方工具的大型 c++ 项目的结构

在没有 3rd 方工具/项目的 MFC C++ 版本中查找内存泄漏

使用 C++ 从 32 位进程访问 64 位 dll

为啥 MonthCalendar 在 3rd 方应用程序中看起来不同?

电话间隙;开发者应用程序是不是支持 3rd 方插件?