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可能已从文档中删除,但目前它是创建窗口后唯一有效的东西。