2011-08-04 35 views
3

什麼是Form2.Show vbModeless, Form1的Win32等價物,它允許我將所有者(不是父類)設置爲任意hWnd並設置默認位置等等?
據我所知,這隻能在創建窗口時設置。使用窗口句柄作爲VB6表單的所有者

+0

我已經通過我自己的定位之前,我稱之爲'.Show'從CreateWindow的[例](以多顯示器在內的課程) – Deanna

+0

除了解決此得到了現在,你可以使用'SetWindowLong函數[ Ptr]''GWL_HWNDPARENT'設置爲'nIndex'來設置所有者窗口。 –

回答

3

在DevX上找到這篇文章。這幾乎是逐字的你的問題。

http://www.devx.com/vb2themax/Tip/18318

+0

我沒有看過DevX多年,我沒有意識到它仍然在附近:)這正是我想要的,但有一個怪異的多顯示器(正是我想要這個代碼修復),所以我會使用自定義代碼來獲取顯示器並將其居中。我可能會因爲始終處於頂級能力而稍後調整。謝謝 – Deanna

+0

僅供參考,在VB6中卸載一個所有者表單卸載它所擁有的所有「它」,這是與API擁有的hWnd的主要區別。 – wqw

3

我不確定你想要完成什麼,但我想你可能正在尋找SetParent函數。

Declare Function SetParent Lib "user32.dll" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long 

hWndChild是手柄的子窗口。
hWndNewParent是新父項的句柄。傳遞null(如果我沒有記錯,則爲0),使桌面成爲所有者。

你可以找到更多關於它的信息here

+0

不,我試圖設置所有者(禁用模式,一些焦點等),而不是父(嵌入在另一個窗口)謝謝雖然。 – Deanna

+0

是的,這對頂層窗戶是正確的。 SetParent()建議通過SetWindowLongPtr()來設置所有者窗口。 –

+0

@Hans - 您錯了,您無法使用SetParent設置所有者窗口,即使頂層窗口將在'hWndNewParent'窗口中生效。 –