如何使用IFileOpenDialog打开* modal *文件对话框?

时间:2017-03-04 13:51:07

标签: c++ windows winapi mfc openfiledialog

我已经尝试在我的C ++应用程序中实现文件对话一段时间了,并且我使用本文中描述的代码取得了很好的成功(它是德语,但代码应该是可以理解的):< / p>

https://msdn.microsoft.com/de-de/library/windows/desktop/ff485843(v=vs.85).aspx

但是,在我的窗口类中使用此代码,这是一个CDialogImpl,我只是无法找到如何制作这个文件选择模式。如果我使用此代码,我可以生成多个文件选择器。

当然,我可以通过添加表示状态的成员变量来跟踪状态,但是仍然无法解决在打开对话框时能够在主窗口中单击的问题。

有什么方法可以让我制作这个窗口模态吗?我一直试图扫描所有可用的方法,但我找不到任何东西。我没有找到任何可以在创建中传递的标志,也没有任何我可以在创建后设置的选项。

感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

您链接的示例非常简单,除文件对话框外没有其他UI。您的程序更复杂,有一个窗口,从中调用文件对话框。

您需要为文件对话框提供所有者。当你这样做时,所有者被禁用,这是使对话模态的部分原因。未通过所有者意味着其他窗口未被禁用,因此仍然响应用户输入。

示例代码不提供所有者,但由于该程序中没有其他窗口,因此是良性的。只有在有多个窗口时,模态才有意义。

因此,要解决此问题,请将所有者(窗口的句柄)传递给文件对话框的Show方法。

禁用所有者窗口是模式对话框的关键部分之一。您会发现任何用于模态对话框的API都希望您指定所有者。养成期望提供自己的窗口,并寻找方法的习惯。