SetItemIcon() 在 Mac 10.13 上停止工作,有什么替代方案

SetItemIcon() stopped working on Mac 10.13, what is the alternative?

本文关键字:什么 方案 停止工作 Mac SetItemIcon      更新时间:2023-10-16

SetItemIcon()用于为菜单项设置图标的Carbon API函数显然已停止在macOS 10.13 High Sierra上运行。我的意思是它现在显示一堆扭曲的像素而不是实际的图标。从 10.0 到 10.12 它工作正常。函数在 Menus.h 中定义

/*
 *  SetItemIcon()
 *  
 *  Mac OS X threading:
 *    Not thread safe
 *  
 *  Availability:
 *    Mac OS X:         in version 10.0 and later in Carbon.framework
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Non-Carbon CFM:   in InterfaceLib 7.1 and later
 */
extern void 
SetItemIcon(
  MenuRef         theMenu,
  MenuItemIndex   item,
  short           iconIndex)                                  AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER;

并像这样在代码中使用:

SetItemIcon((MenuHandle)hMenu, uItem+1, hbmp-256);

并且是使用 XCode 版本 3.2.5 构建的。

有没有办法修复或解决此问题?

附言图标以一些古老的奇怪的十六进制文本格式存储在.r资源文件中:

resource 'ICON' (300) {
    $"0000 0000 0000 0000 0000 0000 0000 0000"
    $"0000 0000 0000 0000 0000 0000 0000 0000"
    $"0000 0000 0000 0000 0000 0000 0000 0F00"
    $"0000 FE00 000F FC00 00FF F800 03FF FF80"
    $"00FF F800 000F FC00 0000 FE00 0000 0F"
};
使用

SetItemIcon() 的一个可行的替代方法是使用 SetMenuItemIconHandle(),它在 10.13 上仍然可以正常工作。

SetMenuItemIconHandle((MenuHandle)hMenu, uItem+1, kMenuIconResourceType, (Handle) CFSTR("myicon.icns")); 

图标需要从十六进制文本格式转换为.icns文件,并添加到项目和应用程序包中。