繁体   English   中英

如何使Shell在SWT中始终处于领先地位?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM