2

我给用户一个CFileDialog来保存他们的工作。支持的文件类型之一是 CSV,但在 CSV 中有几个变体(例如,行优先、列优先等)。我知道我可以在对话框中添加控件以允许这样的选择,但鉴于已经有一个输出文件类型选择器,如果可能的话我想使用它。

4

1 回答 1

3

我将假设您知道如何将多种文件类型添加到CFileDialog列表中,因为有很多关于此的文章。

关闭窗口后,您可以考虑使用GetOFN方法。这将返回一个OPENFILENAME结构。

如果您仔细查看此结构的信息,您将看到:

nFilterIndex

类型:双字

文件类型控件中当前选定过滤器的索引。指向的缓冲区lpstrFilter包含定义过滤器的字符串对。第一对字符串的索引值为 1,第二对字符串的索引值为 2,依此类推。索引为零表示由 指定的自定义过滤器lpstrCustomFilter。您可以在输入上指定一个索引,以指示对话框的初始过滤器描述和过滤器模式。当用户选择一个文件时,nFilterIndex返回当前显示的过滤器的索引。如果nFilterIndex是 0 并且lpstrCustomFilterNULL,系统使用lpstrFilter缓冲区中的第一个过滤器。如果所有三个成员都为零或NULL,则系统不使用任何过滤器,并且不会在对话框的文件列表控件中显示任何文件。

因此,一旦关闭窗口,您就可以获得选定的过滤器索引值。由于您知道与每个索引关联的 CSV 文件类型,因此您知道该怎么做。

更新

您还可以CFileDialog通过修改相同的结构在显示之前对其进行初始化。例如:

dlgFiles.m_ofn.nFilterIndex=2;

您可以使用此方法直接设置过滤器等,然后显示窗口。然后,访问结构以在窗口被关闭时获取选定的索引。

于 2018-02-19T09:39:35.027 回答