这是我的理解,这部分是推测和相关实施细则:
的码头运行在一个独立的过程,你不能平凡跨越进程边界从应用程序到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