C# 有没有办法';转换为';将本机WinAPI窗口转换为WinForms one?

C# 有没有办法';转换为';将本机WinAPI窗口转换为WinForms one?,c#,winforms,winapi,pinvoke,C#,Winforms,Winapi,Pinvoke,我很确定答案是“不”,但我不得不问。 我不想使用内部控件,只想使用窗口本身。 有办法吗 可能取决于你想用它做什么 即使您不能“转换”它,您仍然可以使用p/Invoke和windowsapi对它做很多事情 你也许可以用它做点什么 var form = Control.FromHandle(handle) as Form; 如果可以获得窗口的HWND。如何创建此其他窗口?它和你的WinForms应用程序在同一个进程中存在吗?当然有办法,但它几乎是一个重写。大卫·赫弗南:是的,它是由一个C DLL创

我很确定答案是“不”,但我不得不问。 我不想使用内部控件,只想使用窗口本身。
有办法吗

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

即使您不能“转换”它,您仍然可以使用p/Invoke和windowsapi对它做很多事情

你也许可以用它做点什么

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

如果可以获得窗口的HWND。

如何创建此其他窗口?它和你的WinForms应用程序在同一个进程中存在吗?当然有办法,但它几乎是一个重写。大卫·赫弗南:是的,它是由一个C DLL创建的。你不能只显示窗口吗?你为什么需要“转换”,不管这意味着什么?那根本不起作用。
FromHandle
怎么能起作用?那就得表演魔术了。如果窗口句柄未与WinForms控件关联,则您不能希望它与WinForms控件关联。我希望顶级窗口在某些方法(如设置其位置等,我不知道OP希望执行什么操作)方面与窗体足够相似。当然是,是吗?不,
FromHandle
永远不会执行这种魔法。完全没有变化,很公平。不过值得一试。:)您需要从
WIN32句柄创建
iwin32窗口
,以便可以在ShowDialog中使用它,指定MessageBox的所有者等。。。