【发布时间】:2018-01-06 13:49:35
【问题描述】:
我目前在我的 C++ 应用程序中使用GetSaveFileName 对话框。 (据我所知,这已被 IFileDialog interface 取代,我选择不将此问题限制在已弃用的 API 上,而是接受两种实现的解决方案)。
挑战在于对用户输入做出反应(即用户手动输入文件名输入)并相应地修改文件对话框。
作为一个具体示例,请考虑在用户手动输入支持的文件扩展名时自动更改文件类型下拉列表中的文件类型。
我曾希望OPENFILENAME 结构的lpfnHook 成员可以为我做到这一点,不幸的是,文件名输入中的键入字符似乎没有触发事件。
【问题讨论】:
-
开箱即用已经支持这种行为(至少在 IFileDialog 中是这样)。用户可以在文件名编辑框中输入文件过滤器,然后按回车键应用它。
-
我看不到:在文件名编辑框中按回车相当于按“保存”-它不会更改文件过滤器。请注意,该应用程序具有多个具有相同扩展名的输出选项,即用户必须在对话框仍打开时进行选择,并且在用户关闭对话框后无法根据文件扩展名进行明确的选择。
-
通过文件过滤器我的意思是
*.png。*的存在使其作为过滤器而不是在按下 Enter 时结束文件选择对话框。它应该可以工作。 -
啊,我看到了混乱:我不想设置文件过滤器只是为了过滤对话框中的文件 - 我需要文件过滤器来设置输出格式(我们可以放心地假设它是文件保存对话框)。目的是用户可以输入
image.png,文件过滤器(以及输出格式)自动设置为“便携式网络图形(*.png)”。 -
不要认为这是可能的。为什么不坚持平台标准,避免让可怜的用户感到困惑?