我想在我的应用程序中实现“Always on top”配置选项,该选项立即生效。
我知道我可以使用Shell
样式调用ON_TOP
构造函数。有没有办法在运行时执行此操作,即在已创建Shell
实例之后?
答案 0 :(得分:3)
在Cocoa中,您需要使用反射来获取Shell实例变量window
,然后调用window.setLevel(OS.NSStatusWindowLevel)
。
在Carbon中,您需要获取shellHandle
实例变量,然后调用OS.SetWindowGroup(shellHandle, OS.kFloatingWindowClass)
。根据您的需要,您可能能够做到这一点。
在任何一种情况下,您还应该强制将SWT.ON_TOP
位添加到style
字段。特别是在Carbon中,很多东西都依赖于那个位置。
答案 1 :(得分:3)
在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目前对我没有任何问题。
答案 2 :(得分:1)
有一次我有类似的问题,我找到了这样的线程:
http://dev.eclipse.org/newslists/news.eclipse.platform.swt/msg11143.html
不幸的是我不记得它是否有效......
答案 3 :(得分:1)
在创建小部件后,没有标准的方法来更改小部件的样式。
您必须检查在创建时间内执行的代码,然后调用特定的本机方法(在类OS
中)。
下载适用于您平台的SWT源代码,了解其工作原理。这不是魔术,只是一些手动调试。