【问题标题】:wxWidgets 3.1.3 icon loading under mac - ICNS files unreadable?mac下wxWidgets 3.1.3图标加载-ICNS文件不可读?
【发布时间】:2020-01-09 18:02:29
【问题描述】:

现在在 mac 下加载 .icns 文件似乎是不可能的。以前可以使用 wxIcon 和 wxIconLocation,例如。

wxMimeTypesManager manager;
wxFileType *type = manager.GetFileTypeFromExtension("zip");
wxIconLocation location;
if(type->GetIcon(&location))
{
  // location m_filename is something like "/System/Library/CoreServices/Applications/Archive Utility.app/Contents/Resources/bah-zip.icns"
  wxIcon icon;
  // This will FAIL now as there is no handler for wxBITMAP_TYPE_ICON...
  icon.LoadFile(location.GetFileName(), wxBITMAP_TYPE_ICON, 32, 32);
}

wxMimeTypesManager::GetFileTypeFromExtension 返回一个 wxFileType。 然后你可以使用 wxFileType::GetIcon 返回一个 wxIconLocation。

wxIconLocation::GetFileName() 在 OSX 下返回一个 .icns 文件。如果您将 wxBITMAP_TYPE_ICON 传递给 wxIcon::LoadFile,这曾经可以作为 wxIcon 在 wxWidgets 2.9.1 下加载,因为这会强制 wxIcon::LoadIconFromFile (src/osx/carbon/icon.cpp) 使用 ReadIconFromFSRef 从 icns 加载。

但是由于所有的 Carbon 代码都已经消失了,现在我无法从 .icns 文件中加载任何内容。

我现在该怎么做?

编辑:我使用了以下配置: configure --disable-shared --enable-unicode --prefix="$(pwd)" --enable-stc --enable-ipc --enable-base64 --enable-exceptions --enable-fontenum --enable-fs_archive --enable-stdpaths --enable-sysoptions --enable-threads --enable-url --enable-aui --enable-graphics_ctx --enable-printarch --enable-timer --enable-ribbon --enable-webview --enable-display --enable-splash --enable-snglinst --enable-printfposparam --with-opengl --with-osx_cocoa --with-expat=builtin --with-cxx=11 --enable-cxx11 --enable-stl --enable-std_iostreams --enable-std_string --enable-ftp --enable-http --enable-fileproto --enable-sockets --enable-ipv6 --enable-dataobj --enable-ipc --enable-any --enable-arcstream --enable-backtrace --enable-cmdline --enable-datetime --enable-debugreport --enable-dynamicloader --enable-exceptions --enable-ffile --enable-file --enable-filehistory --enable-filesystem --enable-fontmap --enable-fs_inet --enable-fs_zip --enable-fsvolume --enable-fswatcher --enable-geometry --enable-sound --enable-stopwatch --enable-streams --enable-tarstream --enable-textbuf --enable-textfile --enable-variant --enable-zipstream --enable-protocol --enable-protocol-http --enable-protocol-ftp --enable-protocol-file --enable-html --enable-htmlhelp --enable-propgrid --enable-svg --enable-clipboard --enable-dnd --enable-accel --with-osx_cocoa --enable-debug --with-libpng=builtin --with-libjpeg=builtin --with-zlib=builtin --with-libtiff=builtin

【问题讨论】:

  • 你是如何配置 wxWidgets 的?确切的配置行是什么?
  • 我已编辑帖子以指示我使用的配置,因为我无法将其添加为评论。谢谢顺便说一句。
  • 如果不是所有选项,它们中的大多数都是多余的,因为它们默认为“打开”。无论如何,正如 Vadim 所说 - 看起来这只是一个未实现的功能。作为临时解决方法,请尝试 Vadim 的建议。如果它不起作用 - 您可以在 trac.wxwidgets.org 提交错误或尝试自己实现它。
  • 是的,我故意在配置中“打开”选项,以防默认值发生变化并且更喜欢明确。我会尝试VZ的建议。谢谢。

标签: c++ macos wxwidgets


【解决方案1】:

不幸的是,这对我来说似乎是一个错误。目前wxIcon::LoadIconFromFile()wxOSX_ICON_USE_NSIMAGE==1 时总是返回false,这是默认设置。您可以尝试将setup.h 中的wxOSX_BITMAP_NATIVE_ACCESS 设置为0 并作为短期修复进行重建,但真正需要做的是使用NSImage 实现此功能,可能使用[NSImage initWithContentsOfFile:]

【讨论】:

  • 谢谢,我会尝试wxOSX_BITMAP_NATIVE_ACCESS,然后出于兴趣查看initWithContentsOfFile。谢谢。
  • 为了清楚起见,您需要将wxOSX_BITMAP_NATIVE_ACCESS 关闭,默认开启。另请参阅this ticket
  • 我将include/wx/osx/setup.h wxOSX_BITMAP_NATIVE_ACCESS 设置为0 进行了重建,但最初问题中的代码仍然没有成功,因为wxBITMAP_TYPE_ICON 仍然没有处理程序。我可以尝试另一种类型,但有什么建议吗?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多