這是我的理解,這部分是推測和相關實施細則:
的碼頭運行在一個獨立的過程,你不能平凡跨越進程邊界從應用程序到Dock通過任意NSImage
。只有兩種圖像可以正確傳遞:標準系統圖標和資源包中的圖標。但我不認爲NSImage
是做這些工作的必要咒語。
So you're going to have to use Carbon.具體而言,您需要使用SetMenuItemIconHandle
與任何kMenuSystemIconSelectorType
(包括碳IconRef
年代,隨着GetIconRef
獲得)或kMenuIconResourceType
(CFString
s表示是指一個.icns
文件在您的應用程序包的資源文件夾)。
相關的標題是<HIToolbox/MacApplication.h>
(用於GetApplicationDockTileMenu
),<HIToolbox/Menus.h>
(用於SetMenuItemIconHandle
)和<HIServices/Icons.h>
,(對於GetIconRef
,如果你使用的系統圖標)。
未經檢驗的,但它應該是這個樣子:
#include <Carbon/Carbon.h>
SetMenuItemIconHandle(
GetApplicationDockTileMenu(),
[dockMenu indexOfItem:dockMenuItem],
kMenuIconResourceType,
(Handle) CFSTR("icon.icns")
);
它可能不是這個簡單的;其中一些可能只有32位。
「不適用於64位應用程序」。 :( – Wevah 2012-07-08 08:40:34
必須有其他的東西,QuickTime,Preview&XCode是64位應用程序 – 2012-07-08 10:55:48
@MatthieuRiegler是不是'NSDocumentController'的東西?它可能使用私有的Apple API。 – 2012-07-08 16:20:38