【问题标题】:Is there a way to 'convert' a native WinAPI Window to WinForms one?有没有办法将本机 WinAPI 窗口“转换”为 WinForms 窗口?
【发布时间】:2012-06-25 14:41:23
【问题描述】:

我很确定答案是否定的,但我不得不问。 我不想使用内部控件,只是窗口本身。 有没有办法做到这一点?

【问题讨论】:

  • 如何创建另一个窗口?它是否与您的 WinForms 应用程序存在于同一进程中?
  • 当然有办法,但它几乎是重写。
  • David Heffernan:是的,它是由 C DLL 创建的。
  • 你不能只显示窗口吗?为什么你需要“转换”,不管那是什么意思?
  • 这根本行不通。

标签: c# winforms winapi pinvoke


【解决方案1】:

可能取决于你想用它做什么。

即使你不能“转换”它,你仍然可以使用 P/Invoke 和 Windows API 来做很多事情。

你也许可以用

var form = Control.FromHandle(handle) as Form;

如果你能得到窗口的HWND。

【讨论】:

  • FromHandle 如何工作?那将不得不执行魔术。如果窗口句柄没有与 WinForms 控件相关联,那么您将不希望如此。
  • 我希望顶层窗口可能看起来与表单足够相似,以便某些方法(例如设置其位置等——我不知道 OP 想要做什么)工作.当然是 YMMV。
  • YMMV?不,FromHandle 永远不会施展魔法。完全没有变化。
  • 很公平。不过值得一试。 :)
  • 您需要从WIN32 handle 创建一个IWin32Window 以便它可以在ShowDialog 中使用,指定MessageBox 的所有者等...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
相关资源
最近更新 更多