gpt4 book ai didi

Objective-C:Cocoa 应用程序可以是 "menu only"应用程序吗?

转载 作者:行者123 更新时间:2023-12-03 17:09:20 26 4
gpt4 key购买 nike

这是一个简单的“这可能吗”的学术问题,没有真正的目的。

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 中有效,我会称之为“作弊但可接受的解决方案”。

最佳答案

“有时”可能只是因为您单击的时间足够长,以在按住鼠标左键时触发菜单的延迟显示。单击 Dock 中的图标时菜单的实际显示不受应用程序本身以任何方式控制,因此您找错了树。

您想要做的事情没有什么特别的。任何应用程序都不需要打开窗口。如果你不想要任何 window ,那也可以;只是不要创建任何。但是,如果该应用程序将出现在 Dock 中(按照标准),那么该应用程序将是“可激活的”并具有一个菜单栏(当然可能是空的,但仍然存在)。不过,这样的应用程序会很不正常,并且会让每个 Mac 用户感觉“损坏”。

相反,正确的做法是创建一个不会出现在 Dock 中的应用程序(通过使用 NSApplicationActivationPolicyAccessory),并且具有一个全局菜单(称为“菜单栏中的状态项”)。请参阅NSStatusItem

关于Objective-C:Cocoa 应用程序可以是 "menu only"应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48018140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com