CFileDialog::CFileDialog

调用此函数构造标准 windows 文件对话框。

explicit CFileDialog(
   BOOL bOpenFileDialog,
   LPCTSTR lpszDefExt = NULL,
   LPCTSTR lpszFileName = NULL,
   DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
   LPCTSTR lpszFilter = NULL,
   CWnd* pParentWnd = NULL,
   DWORD dwSize = 0,
   BOOL bVistaStyle = TRUE
);

参数

  • [in] bOpenFileDialog
    指定的参数创建哪种类型的对话框。 设置到构造 文件已打开 对话框的 TRUE。 设置到构造 保存文件 对话框的 FALSE。

  • [in] lpszDefExt
    默认的文件扩展名。 如果用户在文件名框中不包括包含在用户的计算机上的关联) 的已知扩展 (一,lpszDefExt 指定的扩展自动追加到文件名。 如果此参数是 NULL,扩展不是追加。

  • [in] lpszFileName
    显示文件名框的初始文件名。 如果 NULL,不是初始文件名显示。

  • [in] dwFlags
    可以使用自定义对话框一个或多个标记的组合。 有关这些标志的说明,请参见。Windows SDK的 OPENFILENAME 结构。 如果修改 m_ofn.Flags 结构成员,请使用按位或运算符在您的更改保持默认值行为不变。

  • [in] lpszFilter
    一系列字符串名称的筛选器可应用于文件。 如果指定的文件筛选器,因此,只有符合筛选条件将出现在文件的文件的列表。 请参见"备注"部分有关如何安装的更多信息与文件筛选器一起使用。

  • [in] pParentWnd
    指针到文件对话框的父级或所有者窗口。

  • [in] dwSize
    OPENFILENAME 结构的大小。 此值取决于操作系统版本。 MFC 使用此参数确定为适当的对话框创建 (例如,而不是 NT4 对话框的新 Windows 2000 对话框)。 默认值范围的 0 意味着 MFC 代码将确定正确的对话框范围根据程序运行的操作系统版本。

  • [in] bVistaStyle
    只有 + 当在 Windows Vista 或更高版本,运行说明 此参数可在 Visual Studio 2008 及更高版本是将导致新的对话框使用。

    指定文件对话框的样式的参数。 将其设置为使用新的 vista 样式文件对话框的 TRUE。 否则,将使用对话框旧样式。 请参见"备注"部分有关运行在 vista 下的更多信息。

备注

文件已打开保存文件 对话框基于 bOpenFileDialog的值构造。

指定使用 lpszDefExt 的一个默认值扩展可能不生成您期望的行为,因为它很少可预测哪些扩展具有在用户的计算机上的文件关联。 如果需要对追加的多个控件默认值扩展,则可以从 CFileDialog派生您的选件类,并重写方法 CFileDialog::OnFileNameOK 测试扩展处理。

在调用 DoModal之前,若要使用户选择多个文件,请设置 OFN_ALLOWMULTISELECT 标志。 您必须提供自己的文件名缓冲区存储返回的列表多文件的名称。 通过替换 m_ofn.lpstrFile 执行此操作。指针到分配的缓冲区,在构造 CFileDialog后,但,在调用 DoModal之前。 此外,还必须设置与字符数的 m_ofn.nMaxFile 缓冲区中的指向由 m_ofn.lpstrFile。 如果设置要选择的文件的最大数目。n,必需的缓冲区区域大小是 n* (_MAX_PATH + 1) + 1。 例如:

#define MAX_CFileDialog_FILE_COUNT 99
#define FILE_LIST_BUFFER_SIZE ((MAX_CFileDialog_FILE_COUNT * (MAX_PATH + 1)) + 1)

CString fileName;
wchar_t* p = fileName.GetBuffer( FILE_LIST_BUFFER_SIZE );
CFileDialog dlgFile(TRUE);
OPENFILENAME& ofn = dlgFile.GetOFN( );
ofn.Flags |= OFN_ALLOWMULTISELECT;
ofn.lpstrFile = p;
ofn.nMaxFile = FILE_LIST_BUFFER_SIZE;

dlgFile.DoModal();
fileName.ReleaseBuffer();

wchar_t* pBufEnd = p + FILE_LIST_BUFFER_SIZE - 2;
wchar_t* start = p;
while( ( p < pBufEnd ) && ( *p ) )
  p++;
if( p > start )
{
  _tprintf(_T("Path to folder where files were selected:  %s\r\n\r\n"), start );
  p++;

  int fileCount = 1;
  while( ( p < pBufEnd ) && ( *p ) )
  {
    start = p;
    while( ( p < pBufEnd ) && ( *p ) )
      p++;
    if( p > start )
      _tprintf(_T("%2d. %s\r\n"), fileCount, start );
    p++;
    fileCount++;
  }
}

通过使用鼠标和键盘,若要使用户调整一资源管理器样式的对话框,请将 OFN_ENABLESIZING 标志。 只有 + 当您提供了一个挂钩程序或自定义模板,设置此标志是必需的。 标志仅与一资源管理器样式的对话框使用;旧式对话框不能调整大小。

lpszFilter 参数用于确定文件必须在文件必须显示列表文件名的类型。 在该字符串的第一个字符串对介绍筛选器;第二个字符串指示文件扩展名的使用。 多个扩展可以通过使用分号 (;“”字符) 作为分隔符。 与两个字符串末尾“|”字符,后跟 NULL 字符。 可以为该参数还使用 CString 对象。

例如,Microsoft Excel 内容 (当然也允许用户添加到具有扩展 .xlc 中打开的文件 (图表) 或工作表 (.xls)。 Excel 的筛选器中编写如下所示:

static TCHAR BASED_CODE szFilter[] = _T("Chart Files (*.xlc)|*.xlc|")
   _T("Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|")
   _T("*.xlc; *.xls|All Files (*.*)|*.*||");

但是,因此,如果您计划使用此字符串直接更新 OPENFILENAME 结构,应将与在 null 字符,“\0 "的字符串,而不是竖线 (“|”)。

bVistaStyle 参数是适用的,只有 + 当运行在 Windows Vista下时。 在 windows 下的早期版本中,此参数将被忽略。 如果 bVistaStyle 设置为 TRUE,那么,当您编译 Visual Studio 2008 或更高版本的程序,将使用新的 vista 样式 文件对话框。 否则,将使用前面 MFC 样式 文件对话框。 有关更多信息,请参见CFileDialog选件类

对话框模板在基于 bVistaStyle的对话框不支持

示例

CFileDialog::DoModal参见示例。

要求

Header:afxdlgs.h

请参见

参考

CFileDialog选件类

层次结构图

CFileDialog::DoModal

GetOpenFileName

GetSaveFileName

OPENFILENAME