【问题标题】:How to customize open/save file dialogs?如何自定义打开/保存文件对话框?
【发布时间】:2012-02-08 13:10:17
【问题描述】:

我看到一些程序使用自定义的打开/保存文件对话框,它们在那里添加了一些额外的按钮。

我该怎么做?

请注意,我想使用基本的打开/保存对话框,所以我不必重新创建它们,因此保留操作系统语言中的按钮。我只想在那里添加一些额外的按钮。

【问题讨论】:

    标签: c++ winapi visual-c++ dialog


    【解决方案1】:

    更新: 正如 David Heffernan 在下面指出的那样,这个答案适用于 Vista 之前的 Windows 平台。从 Vista 开始,您应该使用 IFileDialogCustomize COM 接口。

    基本上,您必须在传递给GetOpenFileName()/GetSaveFileName()OPENFILENAME 结构中设置OFN_ENABLETEMPLATE 标志。这允许您在同一结构的lpTemplateName 成员中指定自定义对话框模板。该模板将用于构建对话框。详情请见Explorer-Style Custom Templates

    请注意,如果您将自己的控件添加到对话框(在您的情况下为按钮),您应该 还要设置OFN_ENABLEHOOK 标志并在OPENFILENAME 结构的lpfnHook 成员中指定一个回调函数,以便您可以处理这些控件发送的消息。请参阅Explorer-Style Hook Procedures 了解更多信息。

    【讨论】:

    • 这是 5 年前的正确答案,但自从 Vista 以来,它变得更加复杂。现在你需要使用IFileDialogCustomize。如果你使用模板,你最终会得到令人反感的遗留对话框。
    • @David,很有趣,我不知道 Vista 中的对话框自定义已更改。我相应地更新了我的答案,谢谢你的评论:)
    • 不幸的是,我们大多数人仍然需要支持同时使用 XP 和 Vista/7 的客户端。这意味着我们必须编写模板代码 IFileDialogCustomize 代码,并在运行时切换行为。
    • @David Heffernan,“仅与 XP 兼容”的模板是否也适用于 vista...?我真的不在乎它看起来难看还是什么。
    【解决方案2】:

    这应该对你有帮助 Customizing common dialog controls

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      相关资源
      最近更新 更多