我怎樣才能讓一個窗口始終停留在另一個窗口的頂部?並不是說它必須保持在所有其他窗口之上,我只是需要它保持在特定的窗口之上。使窗戶始終停留在已經位於頂部的另一個窗口頂部?
8
A
回答
15
感謝SLaks的回答以及對它的一些評論,我能夠弄清楚如何設置我的表單之間的孩子 - 父母關係。我無法使用Form.Show(owner)
,因爲我想留在前面的表格被顯示爲之前的其他表格。我使用Reflector來檢查Form.Show(owner)
背後的代碼,並發現在幕後,它們都可以在Windows API中解析爲SetWindowLong。
LONG SetWindowLong(
HWND hWnd,
int nIndex,
LONG dwNewLong
);
Form.Show(owner)
呼叫均以-8
的nIndex
SetWindowLong函數。 MSDN聯機文檔不會告訴你,但根據Winuser.h可用於nIndex
的常量之一是GWL_HWNDPARENT
,其值爲-8
。一旦我將這些點連接起來,問題就很容易解決。
這下面是如何設置窗口的父,即使它已經顯示:
using System.Runtime.InteropServices;
[DllImport("user32.dll")]
public static extern int SetWindowLong(HandleRef hWnd, int nIndex, HandleRef dwNewLong);
public static void SetOwner(IWin32Window child, IWin32Window owner)
{
NativeMethods.SetWindowLong(
new HandleRef(child, child.Handle),
-8, // GWL_HWNDPARENT
new HandleRef(owner, owner.Handle));
}
2
也就是說,你應該可以通過讓你的窗口成爲另一個窗口的孩子來做到這一點。
感謝您發佈您的解決方案。這很好! – 2010-02-19 03:30:14