这是我的理解,部分是推测性的,与实现细节有关:
Dock 在单独的进程中运行,您不能将任意NSImage琐碎的东西从您的应用程序跨进程边界传递到 Dock。只有两种图像可以正确传递:标准系统图标和资源包中的图标。但我认为NSImage这两种方法都没有必要的咒语。
所以你将不得不使用碳。具体来说,您需要使用SetMenuItemIconHandlewith kMenuSystemIconSelectorType(涵盖 Carbon IconRefs,通过 获得GetIconRef)或kMenuIconResourceType( CFStrings 引用.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 位的。