如何指定在NSMenuItem(最小化窗口指示器)中显示菱形?

Jon*_*hon 2 java macos java-native-interface cocoa objective-c

我正在创建一个JNI来显示应用程序范围的菜单栏而不是JFrame特定的菜单栏.这样即使没有JFrame存在,我也可以显示菜单栏.我遇到了一个小障碍,在我的窗口菜单中,我无法弄清楚如何为最小化的窗口显示钻石.据我所知,在标准API中,只有三种状态可用On,Off和Mixed,其中mixed是破折号.有没有办法使用标准API显示最小化的钻石?或者我将不得不创建一个钻石图像并使用它?

Ken*_*agh 5

AppKit没有使用公共API来获取此图像.它使用_NSGetThemeImage从旧的HIToolbox外观管理器主题资源中提取图像并将其转换为NSImage.我无法找到一个等效的公共API.

如果您想模仿AppKit的工作方式,请使用:

NSImage* _NSGetThemeImage(int num);

[menuitem setState:NSOnState];
[menuitem setOnStateImage:_NSGetThemeImage(155)];
Run Code Online (Sandbox Code Playgroud)

更好的是,使用此代码获取NSImage,将其保存到TIFF文件,然后在程序中包含该TIFF.这样您就可以避免在运输代码中使用私有API.我怀疑苹果会抱怨你偷了他们的钻石.;)