すぐに有効になる「常に最上位」構成オプションをアプリケーションに実装したいと考えています。
スタイルShell
でコンストラクターを呼び出すことができることを知っています。インスタンスがすでに作成されON_TOP
た後、実行時にそれを行う方法はありますか?Shell
すぐに有効になる「常に最上位」構成オプションをアプリケーションに実装したいと考えています。
スタイルShell
でコンストラクターを呼び出すことができることを知っています。インスタンスがすでに作成されON_TOP
た後、実行時にそれを行う方法はありますか?Shell
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のままにしても問題はありません。
Cocoa では、リフレクションを使用して Shell インスタンス変数を取得し、window
を呼び出す必要がありますwindow.setLevel(OS.NSStatusWindowLevel)
。
shellHandle
Carbon では、インスタンス変数を取得してから を呼び出す必要がありますOS.SetWindowGroup(shellHandle, OS.kFloatingWindowClass)
。必要に応じて、それだけのことを行うだけで済む場合があります。
どちらの場合も、SWT.ON_TOP
ビットをstyle
フィールドに強制的に追加する必要があります。特にカーボンでは、多くのことがそのビットが設定されていることに依存しています。
ある時、私は同様の問題を抱えていて、そのようなスレッドを見つけました:
http://dev.eclipse.org/newslists/news.eclipse.platform.swt/msg11143.html
残念ながら、それが機能するかどうかは覚えていません...
ウィジェットの作成後にウィジェットのスタイルを変更する標準的な方法はありません。
作成時にどのコードが実行されるかを確認してから、特定のネイティブ メソッドを (クラス内でOS
) 呼び出す必要があります。
お使いのプラットフォーム用の SWT のソースをダウンロードして、その動作を確認してください。これは魔法ではなく、手動でデバッグするだけです。