这是我的理解,部分是推测性的,与实现细节有关:
Dock 在单独的进程中运行,您不能将任意NSImage
琐碎的东西从您的应用程序跨进程边界传递到 Dock。只有两种图像可以正确传递:标准系统图标和资源包中的图标。但我认为NSImage
这两种方法都没有必要的咒语。
所以你将不得不使用碳。具体来说,您需要使用SetMenuItemIconHandle
with kMenuSystemIconSelectorType
(涵盖 Carbon IconRef
s,通过 获得GetIconRef
)或kMenuIconResourceType
( CFString
s 引用.icns
应用程序包的 Resources 文件夹中的文件)。
相关标题是<HIToolbox/MacApplication.h>
(for GetApplicationDockTileMenu
)、<HIToolbox/Menus.h>
(for SetMenuItemIconHandle
) 和<HIServices/Icons.h>
, (for GetIconRef
,如果您使用系统图标)。
未经测试,但它应该看起来像这样:
#include <Carbon/Carbon.h>
SetMenuItemIconHandle(
GetApplicationDockTileMenu(),
[dockMenu indexOfItem:dockMenuItem],
kMenuIconResourceType,
(Handle) CFSTR("icon.icns")
);
可能没有这么简单;其中一些可能只是 32 位的。