【问题标题】:Is it possible to snatch and host a win32 hwnd control in a child Winforms window?是否可以在子 Winforms 窗口中抓取和托管 win32 hwnd 控件?
【发布时间】:2014-04-30 20:23:52
【问题描述】:

我在网上进行了搜索,但他们正在讨论如何为 WPF 执行此操作。

想象一个如下所示的 win32 应用程序,并假设应用程序本身允许创建新的 Windows 窗体窗口作为子窗口。所以他们可以互相交谈,我可以发送按键,并控制父应用程序。

我想要做的是剥离图像中概述的列表视图并将其托管在我的 Winforms 窗口中。所以它托管在我的 Winforms 窗口中浮动在顶部,并随着我的 Winforms 窗口移动而移动控件。

我可以从父应用的 .NET API 获得 hWnd 句柄,但我不确定我想要的是否可行。如果有,怎么做?

【问题讨论】:

  • 你不能指望这会起作用。您需要找到不同的解决方案。
  • 你为什么这么说?这可以为 WPF 完成,对吗?那为什么不用 Winforms 呢?
  • 我认为这对任何框架都不可行。您不能期望从一个进程中解除控件并将其作为子控件托管在另一个进程中。当然不是没有其他应用的同意。
  • 谢谢,但是 winforms 应用程序在主应用程序下运行,所以它们是同一个进程吗?
  • 应用程序通常处于不同的进程中。

标签: c# .net winforms winapi


【解决方案1】:

除了不同的应用程序角度,您可以在 WinForms 中使用 NativeWindow 类托管一个 Win32 窗口。

【讨论】:

    【解决方案2】:

    如果您使用 SetParent 函数,那么它会按照您的预期工作:

    http://www.pinvoke.net/default.aspx/user32.setparent

    您可能必须将控件移动到 Winforms 窗口中的适当位置,并可能还使用 MoveWindow 函数调整其大小:

    http://www.pinvoke.net/default.aspx/user32.movewindow

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      • 2010-12-13
      • 1970-01-01
      • 2012-01-03
      相关资源
      最近更新 更多