我怎样才能让一个窗口始终停留在另一个窗口的顶部?并不是说它必须保持在所有其他窗口之上,我只是需要它保持在特定的窗口之上。使窗户始终停留在已经位于顶部的另一个窗口顶部?
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
也就是说,你应该可以通过让你的窗口成为另一个窗口的孩子来做到这一点。
相关问题
- 1. 将窗口绑定到另一个窗口并始终位于顶部
- 2. ToolStripControlHost在顶部停留始终(C#窗口形式)
- 3. 如何使弹出窗口始终位于顶部?
- 4. 如何使Eiffel Vision2窗口始终位于顶部?
- 5. 如何使弹出式窗口始终位于顶部
- 6. 枚举所有“始终位于顶部”的窗口
- 7. 如何确保应用程序窗口始终位于顶部?
- 8. Chrome浏览器弹出窗口始终位于顶部
- 9. openTk .net核心保持窗口始终位于顶部
- 10. NSWindow - 显示将始终位于当前窗口顶部的新窗口
- 11. 使MessageBox留在其他窗口顶部
- 12. SearchView始终位于顶部
- 13. 将窗口保留在Windows中的另一个窗口(不在顶部)前
- 14. 保持一个窗口始终在另一个编程的顶部
- 15. 保持X11窗口在另一个窗口顶部
- 16. 保持一个窗口始终位于顶部 - 包括菜单(win32)
- 17. QT - 窗口顶部
- 18. 总是在窗口顶部的窗口
- 19. 如何使Qt :: Tool不停留在主窗口顶部
- 20. 如何强制Facebook登录窗口始终处于顶部?
- 21. C# - 窗口始终处于顶部问题
- 22. 保持窗体始终位于任务栏顶部
- 23. 将顶层窗口重叠在另一个顶层窗口
- 24. 如何定位弹出窗口相对于窗口顶部?
- 25. 始终位于iPhone的顶部html块
- 26. 窗口顶部的Xaml TabControl
- 27. C# - 如何使X509Certificate2UI窗口始终位于顶端
- 28. 请求窗口管理器将matplotlib图窗口“始终放在顶部”?
- 29. 始终位于顶部Adobe Air
- 30. 锁定窗口顶部div位置
感谢您发布您的解决方案。这很好! – 2010-02-19 03:30:14