【问题标题】:How do you specify to display a diamond in a NSMenuItem (minimized window indicator)?如何指定在 NSMenuItem(最小化窗口指示器)中显示菱形?
【发布时间】:2011-03-26 11:28:35
【问题描述】:

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

【问题讨论】:

  • 您使用的是 NSMenu 还是一些 Java 菜单 API?
  • NSMenu。我想大多数 java 的东西都是无关紧要的,我只是想说明一下我不能使用 cocoa 内置的窗口菜单处理。

标签: java objective-c cocoa macos java-native-interface


【解决方案1】:

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

如果您想模仿 AppKit 的做法,请使用:

NSImage* _NSGetThemeImage(int num);

[menuitem setState:NSOnState];
[menuitem setOnStateImage:_NSGetThemeImage(155)];

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

【讨论】:

  • 呃,太糟糕了。哦,好吧,至少有办法做到这一点。感谢您的帮助!
  • setOnStateImage: 的文档说“Mac OS X 目前不支持更改状态图像。”这是否意味着您的解决方案不应该工作?
  • 好吧,我在发布答案之前试过了,所以是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多