Mfc CFileDialog多个CSV文件类型

Mfc CFileDialog多个CSV文件类型,mfc,cfiledialog,Mfc,Cfiledialog,我给用户一个CFileDialog来保存他们的工作。支持的文件类型之一是CSV,但在CSV中有两种变体(例如,行主、列主等)。我知道我可以在对话框中添加控件来允许这样的选择,但是如果可能的话,我想使用一个输出文件类型选择器。我假设您知道如何将多个文件类型添加到CFileDialog列表中,因为有很多关于这方面的文章 一旦窗户被开除,你可以考虑使用这个方法。这将返回一个结构 如果仔细查看此结构的信息,您将看到: 过滤指数 类型:德沃德 “文件类型”控件中当前选定筛选器的索引。lpstrFilter

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

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

一旦窗户被开除,你可以考虑使用这个方法。这将返回一个结构

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

过滤指数

类型:德沃德

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

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

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

dlgFiles.m_ofn.nFilterIndex=2;

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

我不确定OP到底有什么问题,但我认为值得注意的是,一个过滤器模式(
“*.CSV”
)可以在多个过滤器字符串中显示。它不作为密钥使用,也不必是唯一的。@i完全可检测。在我看来,他至少会有两个密钥,都是CSV文件类型。但是一个写的像这样,另一个写的像那样。这就是索引可以用来微调要写入的CSV格式的地方。我还没有尝试过,但这看起来是一个很好的解决方案,可以确定用户选择的CSV格式。不过还有一个角度:我需要将该菜单设置为正确的菜单——也就是说,如果它加载了CSV格式2,那么写入格式2将是最好的默认值……它应该是
nFilterIndex
,而不是
nFileExtension
。在显示窗口之前,可以初始化
OFN
结构。例如:
dlgExport.m_of n.nFilterIndex=2