SetItemIcon() 在 Mac 10.13 上停止工作,有什么替代方案?
SetItemIcon() stopped working on Mac 10.13, what is the alternative?
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 构建。
有没有办法解决或解决这个问题?
P.S。图标以某种古老的奇怪 HEX 文本格式存储在 .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"));
图标需要从 HEX 文本格式转换为 .icns 文件并添加到项目和应用程序包中。
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 构建。
有没有办法解决或解决这个问题?
P.S。图标以某种古老的奇怪 HEX 文本格式存储在 .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"));
图标需要从 HEX 文本格式转换为 .icns 文件并添加到项目和应用程序包中。