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