【问题标题】:Is there a way to run a winforms exe directly inside of a WPF application?有没有办法直接在 WPF 应用程序中运行 winforms exe?
【发布时间】:2012-08-05 22:16:28
【问题描述】:

我有一个老板希望在 Windows 7 上运行的旧 Windows 移动应用程序。由于它全是 .NET,因此该应用程序在某种程度上可以在 Windows 上运行(我相信它是为 Windows CE 制作的),但它运行在一个小窗户。我想把它搞砸,首先想到的是以某种方式将实际程序转储到 WPF Viewbox 中。这将相当简单,并且不会侵犯任何其他应用程序的大小。

搜索我看到的所有信息都是关于 WindowFormsHost 的信息,用于将 WinForms 用户控件放入 WPF,但没有关于完整可执行文件的信息。有谁知道有没有办法做到这一点?

【问题讨论】:

  • 你有源还是只有exe?
  • @AndersForsgren 我有源码,但它是一个大程序

标签: wpf vb.net winforms


【解决方案1】:

Viewbox 仅适用于纯 WPF 控件。你不能用它来放大一个 WinForms 控件,因为 WinForms 控件对 WPF 的缩放变换一无所知。

您可以尝试使用 WinForms Control.DrawToBitmap 方法将某些东西组合在一起:将 WinForms 控件绘制到位图,然后放大位图并将其绘制到屏幕上。 (不需要 WPF;您可以在纯 WinForms 中执行此操作。)但 DrawToBitmap 有 serious limitations。如果您希望您的应用程序响应鼠标或键盘,您将有很多工作要做,将鼠标和键盘事件转发给原始控件,自己跟踪焦点等等。理论上可能可行,但几乎可以肯定不实用。

可以将一个 .NET EXE 加载到另一个 .NET EXE 中。 EXE 与 DLL 一样是程序集,您可以使用 Assembly.Load 加载它们,甚至可以在解决方案资源管理器中添加引用。但是你不需要做任何异国情调的事情;您可以轻松地将所有源代码编译到您的主机 EXE 中。

您最好的选择可能是在表单设计器中打开每个表单并让所有控件变大。在大型应用程序中可能需要做很多工作,但没有什么说您必须一次完成所有工作 - 而且它可能比任何替代方案都少。

【讨论】:

  • 是的,这就是我最终要做的事情。它有很多窗户,而且需要一段时间。在我的大脑开始融化之前,我每天都会完成一些工作。
猜你喜欢
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
相关资源
最近更新 更多