你有两个选择,一个快速的,一个好的:
快速而相对简单,使用Carbon中的导航服务框架和NavCreateGetFileDialog()
。你会很快完成,几乎不需要学习新知识,但你的代码将无法在64位上运行(这是苹果正在推广的),并且你必须链接Carbon框架。导航服务在64位中已被正式删除,并且在未来通常会被弃用(尽管我预计它会在32位中持续存在相当长的时间)。
第一次需要更多的工作(因为你需要学习一些Objective-C),但更加强大且得到完全支持,将NSOpenPanel封装在一个Objective-C++类中,并将其暴露给你的C++。这是我的封装C++模式,只是反过来。如果你选择这种方式并遇到问题,请留言,我会尽快发布博客文章加以解决。
补充Rob写的内容:
不幸的是,没有Windows的GetOpenFileName
的简单等效。
如果您使用Carbon:我认为NavCreatGetFileDialog
并不容易使用...您可以在CarbonDev中使用此代码来查看如何使用它。那里的代码返回CFURLRef
。要获取POSIX路径,请使用CFURLGetFileSystemReprestnation。
话虽如此,我建议您使用Cocoa。Rob将撰写一篇博客文章,介绍如何从GLUT使用NSOpenPanel
:)
在 macOS 上打开文件对话框的最佳方法可能是使用 AppKit 框架,它是 Cocoa API 的一部分。
您需要从 AppKit 中获取 NSOpenPanel 类,并创建适当的 Objective-C++ 包装以便从普通的 C++ 代码中使用它。对于没有太多 macOS 开发经验的人来说,这不是一项容易的任务。幸运的是,现在已经不必这样做了,因为已经可以在 GitHub 上找到现有的包装器。例如,请查看