NSStatusItem菜单中的VoiceOver错误

时间:2011-12-30 00:58:43

标签: cocoa nsstatusitem voiceover

我使用VoiceOver遇到了以下错误。我是Cocoa编程的新手,所以我很好奇我是做错了什么,或者是否还有另外一种方法可以做到这一点。以下代码在菜单栏上放置一个图标,并且菜单包含1个项目。

当您打开VoiceOver(命令-F5)并单击图标时,它会告诉您:“菜单(1项)”。但是,第二个(或有时是第三个)时间和之后,即使菜单没有改变,它也会显示“菜单(0项)”。

#import <Cocoa/Cocoa.h>

int main(int argc, const char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSStatusItem *status_item;
    NSMenu *menu;

    // The application needs a main menu to run
    NSMenu *mainmenu = [[NSMenu alloc] init];
    [[NSApplication sharedApplication] setMainMenu:mainmenu];

    menu = [[NSMenu alloc] init];
    NSMenuItem *menuitem = [[NSMenuItem alloc] initWithTitle:@"Empty" action:nil keyEquivalent:@""];
    [menu addItem:menuitem];

    status_item = [[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength];

    NSImage *image = [[NSImage alloc] initWithContentsOfFile: @"/Library/Widgets/iTunes.wdgt/Images/repeat_one.png"];
    [status_item setImage:image];
    [status_item setMenu:menu];

    [NSApp run];

    [pool drain];
    return 0;   
}

您可以通过以下方式编译和运行:

gcc -o menubar -Wno-import main.m -lobjc -framework Cocoa && ./menubar

我在Snow Leopard和Lion上都看到了这种行为。知道是什么给出了什么?

谢谢!

0 个答案:

没有答案