[英]How to make a Shell to be always on top in SWT?
我想在我的应用程序中实现“Always on top”配置选项,该选项立即生效。
我知道我可以使用ON_TOP
样式调用Shell
构造函数。 有没有办法在运行时执行此操作,即在已创建Shell
实例之后?
在Cocoa中,您需要使用反射来获取Shell实例变量window
,然后调用window.setLevel(OS.NSStatusWindowLevel)
。
在Carbon中,您需要获取shellHandle
实例变量,然后调用OS.SetWindowGroup(shellHandle, OS.kFloatingWindowClass)
。 根据您的需要,您可能能够做到这一点。
在任何一种情况下,您还应该强制将SWT.ON_TOP
位添加到style
字段。 特别是在Carbon中,很多东西都依赖于那个位置。
在Windows上,你可以这样做:
private static final void toggleAlwaysOnTop(Shell shell, boolean isOnTop){
long handle = shell.handle;
Point location = shell.getLocation();
Point dimension = shell.getSize();
OS.SetWindowPos(handle, isOnTop ? OS.HWND_TOPMOST : OS.HWND_NOTOPMOST,location.x, location.y, dimension.x, dimension.y, 0);
}
所有这些api都是公开的,因此不需要反思。
SetWindowPos
的最后一个参数与Shell.getStyle()
。 将它保留为0目前对我没有任何问题。
有一次我有类似的问题,我找到了这样的线程:
http://dev.eclipse.org/newslists/news.eclipse.platform.swt/msg11143.html
不幸的是我不记得它是否有效......
创建小部件后,没有标准的方法来更改小部件的样式。
您必须检查在创建时间内执行的代码,然后调用特定的本机方法(在类OS
)。
下载适用于您的平台的SWT源,了解它的工作原理。 这不是魔术,只是一些手动调试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.