これは学問的な質問では単純ですが、これは可能ですが、実際の目的はありません。Objective-C:Cocoaアプリケーションを「メニューのみ」のアプリケーションにすることはできますか?
minimalistic example hereで遊んで、私は窓を削除し、アプリを "メニューのみ"にする明るいアイデアを思いついた。
これが結果のコードです。
#import <Cocoa/Cocoa.h>
int main() {
[NSAutoreleasePool new];
[NSApplication sharedApplication];
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
id menubar = [[NSMenu new] autorelease];
id appMenuItem = [[NSMenuItem new] autorelease];
[menubar addItem:appMenuItem];
[NSApp setMainMenu:menubar];
id appMenu = [[NSMenu new] autorelease];
id appName = [[NSProcessInfo processInfo] processName];
id quitTitle = [@"Quit " stringByAppendingString:appName];
id quitMenuItem = [[[NSMenuItem alloc] initWithTitle:quitTitle
action:@selector(terminate:) keyEquivalent:@"q"] autorelease];
[appMenu addItem:quitMenuItem];
[appMenuItem setSubmenu:appMenu];
// Window code deleted
[NSApp activateIgnoringOtherApps:YES];
[NSApp run];
return 0;
}
このコードは機能しますが、メニューを表示したりフォーカスを合わせたりするのは多少不安定です。ドック内のアイコンを右クリックしてコンテキストメニューを表示することもできます。アイコンをクリックすると、すべて正常に終了するメニューが表示されます。単語は時々に注意してください。メニューを表示させる特定のトリガがあるかどうかはまだわかりません。
(ほとんど空の)メニューを予測可能に表示するか、フォーカスを当てるようにこのコードを編集できますか?まったく窓なしでこれを行うことはできますか?
Windowsでは、描画するウィンドウが最小化されたアイコンであり、適切なウィンドウを「復元」する方法がないアイコン専用のプログラムを作成することは少なくとも可能でした。同様の手法がCocoaで動作するなら、私はそれを「不正行為だが容認できる解決策」と呼ぶだろう。
これは既にアプリの一部です。 'id menubar'からダウン。 –