【发布时间】:2021-02-10 11:02:50
【问题描述】:
我需要在 Wind32 应用程序中嵌入 WPF 应用程序的窗口。我使用 Microsoft Windows SetParent 功能。在 Window 7 上它可以正常工作,但在 Windows 10 上 WPF 窗口是不可见的。我可以看到,使用 Spy++,它存在于 Win32 表单上,但不呈现。 MoveWindow 或 SetWindowPos 也无助于解决问题。我用什么 shell 来解决这个问题?
【问题讨论】:
-
简单的答案是:你不能。见Is it legal to have a cross-process parent/child or owner/owned window relationship?。确保您了解“其中一个 [...] 所涉及的窗口不知道它正在参与跨进程窗口树”。
-
我无法在 VS 中使用 windows 桌面应用程序和 wpf 应用程序模板项目在 win10 2004 上重现此问题。在调用 SetParent 之前是否清除了
WS_POPUP样式并设置了WS_CHILD样式? -
是的,我删除了 WS_POPUP 样式并将 WS_CHILD 设置为一个。 WPF应用程序是由国外公司开发的,它创建了很多不可见的窗口,只有一个是可见的。我试图将它们全部添加为孩子,但也没有成功。正如我所写,窗口位于父窗口内但未呈现。
-
正如上面Raymond 的文章中提到的,
SetParent跨进程在技术上是合法的,但后果可能非常难以管理。您的外部 WPF 应用程序似乎根本没有准备好以这种方式操作其窗口。