簡體   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