Winapi 将窗口句柄用作VB6窗体的所有者

Winapi 将窗口句柄用作VB6窗体的所有者,winapi,vb6,user32,Winapi,Vb6,User32,Form2.Show vbModeless,Form1的Win32等价物是什么,允许我将所有者(而不是父级)设置为任意hWnd并设置默认位置等? 据我所知,这只能在创建窗口时设置。我不确定您要实现什么,但我认为您可能正在寻找SetParent函数 Declare Function SetParent Lib "user32.dll" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long hWndChild是子窗口的句柄。

Form2.Show vbModeless,Form1
的Win32等价物是什么,允许我将所有者(而不是父级)设置为任意hWnd并设置默认位置等?

据我所知,这只能在创建窗口时设置。

我不确定您要实现什么,但我认为您可能正在寻找SetParent函数

Declare Function SetParent Lib "user32.dll" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
hWndChild是子窗口的句柄。
hWndNewParent是新父级的句柄。传递null(如果我没记错,则为0)以使桌面成为所有者


你可以找到更多关于它的信息。

我现在已经知道了,在我调用
之前,我自己定位了它。Show
(当然要考虑多个监视器)除了CreateWindow[Ex],你还可以使用
SetWindowLong[Ptr]
使用
GWL\u hwndpresent
作为'nIndex'设置所有者窗口。在DevX上找到本文。你的问题几乎一字不差。我已经好几年没有看过DevX了,我没有意识到它仍然存在:)这正是我想要的,但有一个多监视器的怪癖(正是我想要这个代码修复的),所以我将坚持使用自定义代码来获取监视器并将其居中。我可能会调整以后,因为总是在顶端的能力虽然。ThanksFYI,在VB6中卸载所有者表单也会卸载所有“由其拥有”的表单,这与API拥有的hWnd有很大区别。不,我试图设置所有者(在模式、某些焦点等时禁用),而不是父级(嵌入另一个窗口)谢谢。是的,这对于顶级窗口是正确的。建议使用SetParent()而不是SetWindowLongPtr()来设置所有者窗口。@Hans-你错了,你不能用SetParent设置所有者窗口,即使是顶级窗口也会在“hWndNewParent”窗口中设置为父窗口。@Sertac-不,SetParent()不会在顶级窗口上设置WS_子窗口样式位。检查MSDN文档。还要注意CreateWindowEx()的hwndParent参数用于创建自有窗口。SetWindowLong/Ptr()的GWL_HWNDPARENT值已从文档中删除。@Hans-MSDN关于WS_CHILD标志的意思是,“API正在设置父项,但您自己会注意样式”。SetParent的文档中没有提到所有权。事实上,我能找到的关于该主题的唯一文档是“在创建一个拥有的窗口之后,应用程序无法将该窗口的所有权转移到另一个窗口。”。GWL_HWNDPARENT可能已从文档中删除,但目前它是创建窗口后唯一有效的东西。