Как сделать так, чтобы Shell всегда был на вершине в SWT? - PullRequest
3 голосов
/ 10 мая 2010

Я хотел бы реализовать опцию конфигурации «Всегда сверху» в моем приложении, которая вступает в силу немедленно.

Я знаю, что могу вызвать конструктор Shell со стилем ON_TOP. Есть ли способ сделать это во время выполнения, то есть после того, как экземпляр Shell уже создан?

Ответы [ 4 ]

3 голосов
/ 18 июня 2016

В 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, в настоящее время у меня нет проблем.

3 голосов
/ 16 июня 2010

В Какао вам нужно использовать отражение, чтобы получить переменную экземпляра Shell window, а затем вызвать window.setLevel(OS.NSStatusWindowLevel).

В Carbon вам нужно получить переменную экземпляра shellHandle и затем вызвать OS.SetWindowGroup(shellHandle, OS.kFloatingWindowClass). Возможно, вам удастся сделать так много, в зависимости от ваших потребностей.

В любом случае вы также должны принудительно добавить бит SWT.ON_TOP в поле style. В частности, в Carbon многое зависит от того, какой бит установлен.

1 голос
/ 10 мая 2010

Не существует стандартного способа изменить стили виджетов после их создания.

Вы должны проверить, какой код выполняется во время создания, а затем вызвать определенный нативный метод (в классе OS).

Загрузите исходный код SWT для вашей платформы, чтобы увидеть, как он работает. Это не волшебство, просто ручная отладка.

1 голос
/ 10 мая 2010

Однажды у меня была похожая проблема, и я нашел такую ​​ветку:

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

К сожалению, я не помню, работает ли он ...

...