3

我想在我的应用程序中实现立即生效的“始终在顶部”配置选项。

我知道我可以用样式调用Shell构造函数。ON_TOP有没有办法在运行时做到这一点,即在Shell实例已经创建之后?

4

4 回答 4

3

在 Cocoa 中,您需要使用反射来获取 Shell 实例变量window,然后调用window.setLevel(OS.NSStatusWindowLevel).

在 Carbon 中,您需要获取shellHandle实例变量,然后调用OS.SetWindowGroup(shellHandle, OS.kFloatingWindowClass). 根据您的需要,您可能可以做这么多。

在任何一种情况下,您还应该强制将该SWT.ON_TOP位添加到该style字段中。特别是在 Carbon 中,很多事情都依赖于被设置的那个位。

于 2010-06-15T23:05:04.263 回答
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 都是公开的,因此不需要反思。

最后一个参数 forSetWindowPos与 不同Shell.getStyle()。将其保留为 0 目前对我来说没有问题。

于 2016-06-18T03:30:30.747 回答
1

有一次我遇到了类似的问题,我发现了这样的线程:

http://dev.eclipse.org/newslists/news.eclipse.platform.swt/msg11143.html

不幸的是,我不记得它是否有效......

于 2010-05-10T08:21:11.503 回答
1

没有标准的方法可以在创建小部件后更改它们的样式。

您必须检查在创建期间执行了哪些代码,然后调用特定的本地方法(在类中OS)。

为您的平台下载 SWT 的源代码,看看它是如何工作的。这不是魔术,只是一点手动调试。

于 2010-05-10T08:48:00.563 回答