65.9K
CodeProject 正在变化。 阅读更多。
Home

向“打开文件”对话框添加筛选器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.43/5 (3投票s)

1999年11月25日

1分钟阅读

viewsIcon

181362

downloadIcon

3442

为“打开文件”对话框添加筛选器。

Sample Image

引言

MFC 的 CFileDialog 类仅提供一个默认文件扩展名的配置,如果未提供扩展名,则将其添加到文件名中。文件导出功能处理可能存在许多不同的文件扩展名,这些扩展名必须根据所选的文件类型进行添加。CFileExportDialog 类就是这样做的。此外,当用户从组合框中选择另一种文件类型时,文件名编辑控件中的扩展名会自动更改。

对话框的使用很简单,因为它模仿了父类 CFileDialog 的使用方式。除了构造函数和析构函数之外,只有一个额外的公共函数,即 GetFilterIndex(),它返回所选文件类型的索引。如果一个扩展名由两种或多种文件类型共享,则无法从结果文件名中确定文件类型,这将非常有用。为了符合标准的 Windows 做法,此索引从 1 开始。

需要注意的是筛选器字符串的格式。此字符串必须采用“Word 文件 (*.doc)|文本文件 (*.txt)”的形式。即每个格式一个扩展名,格式之间用竖线分隔。每个扩展名必须放在括号内,并且采用 *.ext 的形式。

初始文件类型由默认文件名确定(如果提供了默认文件名)。此文件名也可以是“*.ext”。如果未提供默认文件名,则使用筛选器字符串中的第一个文件类型。

通常这样使用 CFileExportDialog

CFileExportDialog dialog("Save As Type", // title
  "Windows Bitmap (*.bmp)|JPEG Compressed Image (*.jpg)|"\  // filter string..
  "Windows Meta File (*.wmf)|Windows Enhanced Meta File (*.emf)", // with file types
  "visualization.jpg"); // default filename (may be omitted)

if (dialog.DoModal() == IDOK) {
  CString filename = dialog.GetPathName();
  int filetype = dialog.GetFilterIndex();
  SaveFile(filename, filetype); // defined somewhere in the application
}
© . All rights reserved.