【问题标题】:Embedding file open dialog嵌入文件打开对话框
【发布时间】:2011-10-17 09:39:03
【问题描述】:

Office 2010 有一种新型功能区,backstage view。这已在 MFC 中使用 Codejock Xtreme Toolkit Pro V15.0.1 实现。

问题是我觉得文件>打开和文件>另存为在Office中表现得很奇怪。他们打开一个模态文件打开对话框,而不是在后台打开嵌入式文件打开对话框,这会(恕我直言)感觉更自然。

我找不到使用 MFC 或 Win32 在 C++ 中执行此操作的方法。我发现的唯一问题是 this 问题,但那是针对 Delphi 的。

那么,是否可以将标准的 Windows 文件打开对话框作为控件嵌入到另一个对话框中?还是我需要自己实现整个事情?

【问题讨论】:

  • 我怀疑这可以做到。顺便说一句,Office 团队多年来一直被嘲笑使用他们自己的文件对话框而不是系统对话框。直到 Office 2007,他们才开始使用系统对话框。在我看来,使用系统对话框是一件好事,但我可以看到嵌入后台的感觉如何更干净。

标签: c++ windows winapi mfc ribbon


【解决方案1】:

据我所知,标准的“打开/保存”对话框功能仅通过模态对话框公开(通过GetOpenFilename Win32 API)。

有一个标准的机制来自定义对话框(参见Skizz answer),但它仍然是一个模态对话框。一种高级定制案例是 VB6 Open Project 对话框:

Existing 选项卡包含一个文件对话框。他们是如何做到的呢?我的意思是,他们是如何设法将标准对话框放入其 3-tabs 属性表的页面中的?

似乎他们只是使用标准自定义对话框并在标准目录/文件控件上方添加了一个选项卡控件,并为目录/文件控件上方的其他“选项卡”添加了列表视图。当单击Existing 以外的选项卡时,这些目录/文件控件随后被自定义代码隐藏。你明白了:没有真正的标签!只是一个很好的旧文件对话框,其中主要控件可能被隐藏以支持其他控件。

所以我的简短回答是:将对话框用作子控件非常不走运。

现在,回到 Office:我认为保留模式对话框会更好。否则会让用户感到困惑:我开始输入的路径是否是我刚刚单击“主页”并让保存命令未完成的真实路径?

【讨论】:

  • 根据我对 Skizz 答案的评论,在 Vista 引入 IFileDialogCustomize 之后,所有这些信息现在都已经过时了。
  • @David:很高兴了解 IFileDialogCustomize,但除了根据this one 等各种报告,XP 仍在 35% 的计算机上使用这一事实之外,这种新的自定义机制如何过时我的答案?它是否允许按照 OP 的要求嵌入文件对话框?
  • 它使它不完整。在您准备放弃对 XP 的支持之前,需要使用这两种方法来实现文件对话框的任何自定义。此外,IFileDialogCustomize 提供的自定义功能远不如旧式 XP 对话框提供的灵活。因此,您显示的屏幕截图根本不适用于新对话框。使用IFileDialogCustomize 嵌入当然没有变化。虽然您可以继续使用 XP 样式自定义,但结果是令人反感的遗留对话框。
【解决方案2】:

我不知道你是否可以将文件打开对话框嵌入到另一个对话框中,但你当然可以扩展现有的对话框:-

Here's one implementation.

And another.

And an MSDN version.

感谢 David 指出以上内容有点过时,所以,在快速谷歌之后,这里是 more modern take on extending the file dialogs (and lots of other stuff as well).

【讨论】:

  • 所有这些链接都已过期。当 Vista 发布时,游戏完全改变了。 IFileDialogCustomize 是执行此操作的新方法。
猜你喜欢
  • 2010-09-28
  • 2011-09-11
  • 2010-12-11
  • 1970-01-01
  • 2010-09-21
  • 2013-05-12
  • 2022-01-23
  • 2011-02-04
  • 1970-01-01
相关资源
最近更新 更多