【问题标题】:How to host a WPF application inside a Win32 application on Windows 10如何在 Windows 10 上的 Win32 应用程序中托管 WPF 应用程序
【发布时间】: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 应用程序似乎根本没有准备好以这种方式操作其窗口。

标签: wpf winapi


【解决方案1】:

我已经使用 ShowWindow 函数解决了这个问题。只有在最小化然后最大化时才会重新绘制窗口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    相关资源
    最近更新 更多