11

我想为另一个外部应用程序(与 .NET 无关,纯 Win32)制作一个 .NET 表单作为 TopMost 表单,因此它保持在该 Win32App 之上,而不是其他正在运行的应用程序。

我有 Win32App 的句柄(由 Win32App 本身提供),我已经通过C# 中的 P/Invoke尝试了Win32 SetParent() 函数,但是我的 .NET 表单被限制在 Win32App 中,这不是我想要的.

4

3 回答 3

17

我认为您正在寻找的是 P/InvokeSetWindowLongPtr(win32window, GWLP_HWNDPARENT, formhandle)

谷歌搜索

于 2008-09-25T13:42:20.973 回答
2

是的!我已经有一个 SetWindowLongPtr 的 P/Invoke 导入(这是 x64 安全的)。并使用 Reflector 我搜索了 Form.Owner 属性(即 get_Owner(Form value) 方法)并设法更改了所有者

SetWindowLongPtr(childHdl, -8, OwnerHdl)

在我可以在这里发布解决方案之前,我正在查看 -8 (0xFFFFFFFFFFFFFFF8) 的含义,但乔尔已经指出了这一点。

谢谢!

于 2008-09-25T13:57:36.583 回答
-1

自从提出这个问题以来已经 12 年了,所以我想我会从这里提供一个更新的答案。

不要使用 GWLP_HWNDPARENT 索引调用 SetWindowLongPtr 来更改子窗口的父级。而是使用SetParent函数。

于 2020-07-08T00:29:06.203 回答