3

すぐに有効になる「常に最上位」構成オプションをアプリケーションに実装したいと考えています。

スタイルShellでコンストラクターを呼び出すことができることを知っています。インスタンスがすでに作成されON_TOPた後、実行時にそれを行う方法はありますか?Shell

4

4 に答える 4

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 はすべて公開されているため、リフレクションは必要ありません。

の最後の引数SetWindowPosは と同じではありませんShell.getStyle()。現在、0のままにしても問題はありません。

于 2016-06-18T03:30:30.747 に答える
3

Cocoa では、リフレクションを使用して Shell インスタンス変数を取得し、windowを呼び出す必要がありますwindow.setLevel(OS.NSStatusWindowLevel)

shellHandleCarbon では、インスタンス変数を取得してから を呼び出す必要がありますOS.SetWindowGroup(shellHandle, OS.kFloatingWindowClass)。必要に応じて、それだけのことを行うだけで済む場合があります。

どちらの場合も、SWT.ON_TOPビットをstyleフィールドに強制的に追加する必要があります。特にカーボンでは、多くのことがそのビットが設定されていることに依存しています。

于 2010-06-15T23:05:04.263 に答える
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 に答える