2010-08-06 49 views
2

我正在創建一個JNI來顯示應用程序範圍的菜單欄,而不是JFrame特定的一個。這使我即使在沒有JFrames的情況下也能顯示菜單欄。我碰到了一個小障礙,在我的窗口菜單中,我無法弄清楚如何顯示最小化窗口的鑽石。據我所知,在標準的API中,只有三種狀態可用,On,Off和Mixed,其中混合是破折號。有沒有辦法使用標準API顯示最小化的鑽石?或者我將不得不創建一個鑽石圖像並使用它?如何指定在NSMenuItem(最小化窗口指示器)中顯示菱形?

+0

您是使用NSMenu還是某些Java菜單API? – 2010-08-06 23:00:17

+0

NSMenu。我猜大多數java的東西是不相關的,我只是想說清楚,我不能使用可可內建的窗口菜單處理。 – Jonathon 2010-08-07 00:04:19

回答

5

AppKit沒有使用公共API來獲取此圖像。它使用_NSGetThemeImage從舊的HIToolbox外觀管理器主題資源中提取圖像並將其轉換爲NSImage。我無法找到相應的公共API。

如果你想模仿了AppKit是怎麼做的,使用:

NSImage* _NSGetThemeImage(int num); 

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

更重要的是,使用此代碼搶NSImage中,將其保存爲TIFF文件,然後包括TIFF在你的程序。這樣您就可以避免在發貨代碼中使用私有API。我懷疑蘋果會抱怨你偷了他們的鑽石。 ;)

+0

+1目前還沒有公共API可以做到這一點 – jrtc27 2010-08-11 15:38:34

+0

呃,這很糟糕。哦,至少有一種方法可以做到。謝謝您的幫助! – Jonathon 2010-08-12 03:35:12

+0

'setOnStateImage:'的文檔中提到「Mac OS X當前不支持更改狀態圖像。」這是否意味着你的解決方案不應該工作? – JWWalker 2010-08-13 05:57:27

相關問題