6

私の質問は非常に簡単です:

ドックのアプリアイコンにカスタムメニューを使用するには- (NSMenu*) applicationDockMenu: (id) sender;NSApplicationDelegateドックに表示されるメニューを返す必要があります。

を使用setImageするとNSMenuItem、通常、メニューにアイコンを追加できます。これらは通常のメニューには表示されますが、アプリのドックアイコンのコンテキストメニューには表示されません。

それでは、AppleはQuickTime、XCode、Previewをどのように管理して、ドックのコンテキストメニューでアクセス可能な最近開いたファイルのリストにアイコンを表示しましたか?

どうも。

4

2 に答える 2

1

部分的に推測であり、実装の詳細に関連する私の理解は次のとおりです。

NSImageDock は別のプロセスで実行され、プロセスの境界を越えてアプリケーションから Dock に任意のものを簡単に渡すことはできません。適切に渡すことができるイメージは、標準のシステム アイコンとリソース バンドル内のアイコンの 2 種類だけです。NSImageしかし、これらのいずれかが機能するために必要な呪文はないと思います。

したがって、Carbon を使用する必要があります。具体的には、 (で取得したCarbon をカバー) または(アプリケーションバンドルの Resources フォルダー内のファイルを参照する) のSetMenuItemIconHandleいずれかで使用する必要があります。kMenuSystemIconSelectorTypeIconRefGetIconRefkMenuIconResourceTypeCFString.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 ビットのみである可能性があります。

于 2012-07-08T04:12:38.957 に答える