ウィンドウにフォーカスを当てずに、サード パーティ アプリケーションの上にウィンドウ (タイトル バーなし) を表示する必要があります。
NSPanel
非アクティブ化を有効にする設定を使用してみましたが、役に立ちませんでした。
試してみorderFront:self
ましたが、それも役に立ちませんでした。
[NSApp activateIgnoringOtherApps:YES];
そうしないとウィンドウが表示されないため、常に追加する必要がありました。
この機能だけのサンプル プロジェクトがあります:
http://users.telenet.be/prullen/TopW2.zip
UIElement
true
アプリケーションの plist ファイルで に設定されているため、ドックはありません。ALT + SPACE
同時に押すと、ウィンドウをアクティブにすることができます。その下のアプリがフォーカスを失っていることがわかります。これを修正する方法について何か考えはありますか?他のアプリがそれを行うのを見たので、それが可能であることを知っています.
編集:これまでのコードは次のとおりです。ウィンドウはアクティブ化されていない NSPanel であることを忘れないでください。私はまだその最後のNSApp activateIgnoringOtherApps
行が必要です。さもなければ表示されません。しかしもちろん、それはウィンドウをアクティブなものにします。
_windowController = [[MyWindowController alloc] initWithWindowNibName:@"MyWindowController"];
[[_windowController window] setLevel:NSNormalWindowLevel+1];
[[_windowController window] orderFrontRegardless];
[_windowController showWindow:self];
[NSApp activateIgnoringOtherApps:YES];
また、NSPanel をサブクラス化し、2 つのメソッドを追加しました。
- (BOOL)canBecomeKeyWindow
{
return YES;
}
- (BOOL)canBecomeMainWindow
{
return YES;
}
編集: OK、setHidesOnDeactivate のチェックを外すとこれは修正されますが、ウィンドウが非表示になることはありません。ユーザーがその下のアプリを押すか、別のアプリに切り替えると、非表示にする必要があります。
編集 2: OK、これで上記の問題は解決したようです:
- (void)awakeFromNib
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideWindow) name:NSWindowDidResignKeyNotification object:nil];
}
- (void)hideWindow {
[self setHidesOnDeactivate:YES];
}
より良い方法があるかどうかはわかりません。
そして、ウィンドウを表示する方法を知りたい人のために:
[[_windowController window] setLevel:NSPopUpMenuWindowLevel];
[[_windowController window] orderFrontRegardless];
[[_windowController window] makeKeyWindow];
[_windowController showWindow:self];