CFileDialog 类

封装用于文件打开操作或文件保存操作的常见对话框。

语法

class CFileDialog : public CCommonDialog

成员

公共构造函数

名称 描述
CFileDialog::CFileDialog 构造 CFileDialog 对象。

公共方法

名称 描述
CFileDialog::AddCheckButton 向对话框添加复选按钮。
CFileDialog::AddComboBox 向对话框添加组合框。
CFileDialog::AddControlItem 将项添加到对话框中的容器控件。
CFileDialog::AddEditBox 向对话框添加编辑框。
CFileDialog::AddMenu 向对话框添加菜单。
CFileDialog::AddPlace 已重载。 将文件夹添加到可供用户打开或保存项的位置列表中。
CFileDialog::AddPushButton 向对话框添加按钮。
CFileDialog::AddRadioButtonList 将选项按钮(也称单选按钮)组添加到对话框。
CFileDialog::AddSeparator 向对话框添加分隔符。
CFileDialog::AddText 向对话框添加文本内容。
CFileDialog::ApplyOFNToShellDialog 更新 CFileDialog 的状态,使之与 m_ofn 成员变量中存储的参数和标志匹配。
CFileDialog::DoModal 显示对话框,使用户能够做出选择。
CFileDialog::EnableOpenDropDown 在对话框中的“打开”或“保存”按钮上启用下拉列表。
CFileDialog::EndVisualGroup 停止将元素添加到对话框中的视觉对象组。
CFileDialog::GetCheckButtonState 获取对话框中的复选按钮(复选框)的当前状态。
CFileDialog::GetControlItemState 获取在对话框中找到的容器控件中的项的当前状态。
CFileDialog::GetControlState 获取给定控件的当前可见性和启用状态。
CFileDialog::GetEditBoxText 获取编辑框控件中的当前文本。
CFileDialog::GetFileExt 返回所选文件的扩展名。
CFileDialog::GetFileName 返回所选文件的文件名。
CFileDialog::GetFileTitle 返回所选文件的标题。
CFileDialog::GetFolderPath 为资源管理器样式的“打开”或“另存为”常见对话框检索当前处于打开状态的文件夹或目录的路径。
CFileDialog::GetIFileDialogCustomize 检索自定义 CFileDialog 对象的内部 COM 对象。
CFileDialog::GetIFileOpenDialog 检索用作“打开”文件对话框的 CFileDialog 的内部 COM 对象。
CFileDialog::GetIFileSaveDialog 检索用作“保存”文件对话框的 CFileDialog 的内部 COM 对象。
CFileDialog::GetNextPathName 返回下一个选定文件的完整路径。
CFileDialog::GetOFN 检索 CFileDialog 对象的 OPENFILENAME 结构。
CFileDialog::GetPathName 返回选定文件的完整路径。
CFileDialog::GetReadOnlyPref 返回选定文件的只读状态。
CFileDialog::GetResult 获取用户在对话框中所做的选择。
CFileDialog::GetResults 获取用户在某个允许多项选择的对话框中所做的选择。
CFileDialog::GetSelectedControlItem 从对话框中的指定容器控件获取特定项。
CFileDialog::GetStartPosition 返回文件名列表的第一个元素的位置。
CFileDialog::HideControl 在资源管理器样式的“打开”或“另存为”常见对话框中隐藏指定的控件。
CFileDialog::IsPickFoldersMode 确定当前对话框是否处于文件夹选取器模式。
CFileDialog::MakeProminent 将某个控件放在对话框中,使其突出显示(相对于其他已添加的控件而言)。
CFileDialog::RemoveControlItem 将项从对话框的容器控件中删除。
CFileDialog::SetCheckButtonState 设置对话框中的复选按钮(复选框)的当前状态。
CFileDialog::SetControlItemState 设置在对话框中找到的容器控件中的项的当前状态。
CFileDialog::SetControlItemText 设置控件项的文本。 例如,单选按钮或菜单中项附带的文本。
CFileDialog::SetControlLabel 设置与控件关联的文本,例如按钮文本或编辑框标签。
CFileDialog::SetControlState 设置给定控件的当前可见性和启用状态。
CFileDialog::SetControlText 在资源管理器样式的“打开”或“另存为”常见对话框中设置指定控件的文本。
CFileDialog::SetDefExt 为资源管理器样式的“打开”或“另存为”常见对话框设置默认文件扩展名。
CFileDialog::SetEditBoxText 设置编辑框控件中的当前文本。
CFileDialog::SetProperties 提供一个属性存储,它定义将默认值用于正在保存的项。
CFileDialog::SetSelectedControlItem 在对话框中找到的选项按钮组或组合框中设置特定项的选定状态。
CFileDialog::SetTemplate 设置 CFileDialog 对象的对话框模板。
CFileDialog::StartVisualGroup 在对话框中声明视觉对象组。 对任何“add”方法的后续调用会将这些元素添加到此组。
CFileDialog::UpdateOFNFromShellDialog 更新存储在 m_ofn 成员变量中的数据,使之与文件对话框的当前状态匹配。

受保护方法

名称 描述
CFileDialog::OnButtonClicked 在单击按钮时调用。
CFileDialog::OnCheckButtonToggled 在选中/取消选中复选框时调用。
CFileDialog::OnControlActivating 在控件处于活动状态时调用。
CFileDialog::OnFileNameChange 处理 WM_NOTIFY CDN_SELCHANGE 消息。
CFileDialog::OnFileNameOK 验证对话框中输入的文件名。
CFileDialog::OnFolderChange 处理 WM_NOTIFY CDN_FOLDERCHANGE 消息。
CFileDialog::OnInitDone 处理 WM_NOTIFY CDN_INITDONE 消息。
CFileDialog::OnItemSelected 在选择容器项时调用。
CFileDialog::OnLBSelChangedNotify 让你可以在文件选择发生更改时执行自定义操作。
CFileDialog::OnShareViolation 处理共享冲突。
CFileDialog::OnTypeChange 处理 WM_NOTIFY CDN_TYPECHANGE 消息。

公共数据成员

“属性” 描述
CFileDialog::m_ofn Windows OPENFILENAME 结构。 提供对基本文件对话框参数的访问权限。

备注

使用公共文件对话框,你可以通过一个符合 Windows 标准的方式实现文件选择对话框(例如“打开文件”和“另存为”)。

你可以像使用提供的构造函数一样使用 CFileDialog,也可以从 CFileDialog 中派生你自己的对话框类,然后按需求编写构造函数。 在这两种情况下,这些对话框的行为将类似于标准 MFC 对话框,因为这些对话框派生自 CCommonDialog 类CFileDialog 依赖于 Windows 中包含的COMMDLG.DLL文件。

使用 Windows Vista 或更高版本的 CFileDialog 的外观和功能与早期版本的 Windows 不同。 如果在 Windows Vista 或更高版本下编译并运行程序,则默认 CFileDialog 会自动使用新 Windows Vista 或更高版本的样式,不需进行代码更改。 在构造函数中使用 bVistaStyle 参数手动重写此自动更新。 自动更新的例外是自定义对话框。 它们不会转换为新样式。 有关构造函数的详细信息,请参阅 CFileDialog::CFileDialog

注意

使用 CFileDialog 时,Windows Vista 或更高版本中的控件 ID 系统与早期版本的 Windows 不同。 必须先更新对代码中的 CFileDialog 控件的所有引用,然后才能从早期版本的 Windows 移植项目。

Windows Vista 或更高版本不支持某些 CFileDialog 方法。 请查看各个方法主题,了解方法是否受支持。 此外,Windows Vista 或更高版本不支持下面这些继承的函数:

CFileDialog 类的 Windows 消息因所用操作系统而异。 例如,Windows XP 不支持 CFileDialog 类的 CDialog::OnCancelCDialog::OnOK。 但是,Windows Vista 及更高版本的操作系统确实支持它们。 有关生成的不同消息及其接收顺序的详细信息,请参阅 CFileDialog 示例:日志记录事件顺序

若要使用 CFileDialog 对象,请先使用 CFileDialog 构造函数创建该对象。 构造对话框后,可以设置或修改 CFileDialog::m_ofn 结构中的任何值来初始化对话框控件的值或状态。 m_ofn 结构的类型为 OPENFILENAME。 有关详细信息,请参阅 Windows SDK 中的 OPENFILENAME 结构。

初始化对话框控件后,请调用 CFileDialog::DoModal 方法以显示对话框,以便用户可以键入路径和文件名。 DoModal 返回的信息会表明用户是单击了“确定”(IDOK) 按钮还是“取消”(IDCANCEL) 按钮。 如果 DoModal 返回 IDOK,则可以使用 CFileDialog 公共成员函数之一检索用户输入的信息。

注意

在 Windows Vista 或更高版本中,多次调用 IFileDialog::SetFileTypes 会导致错误。 对于任何 CFileDialog 实例,第二次调用 SetFileTypes 会在 Windows Vista 或更高版本中返回 E_UNEXPECTED。 某些 CFileDialog 方法函数会调用 SetFileTypes。 例如,对于 CFileDialog 的同一实例,两次调用 CFileDialog::DoModal 会生成 ASSERT

CFileDialog 包括多个受保护的成员,这些成员可用于对共享冲突、文件名验证和列表框更改通知进行自定义处理。 这些受保护的成员是大多数应用程序不必使用的回调函数,因为会自动执行默认处理。 不需要这些函数的消息映射条目,因为它们是标准虚拟函数。

可以使用 Windows CommDlgExtendedError 函数来确定对话框初始化期间是否发生了错误,并了解有关错误的详细信息。

系统会自动处理 CFileDialog 对象的销毁。 无需调用 CDialog::EndDialog

若要让用户选择多个文件,请在调用 DoModal 之前设置 OFN_ALLOWMULTISELECT 标志。 必须提供自己的文件名缓冲区才能容纳返回的包含多个文件名的列表。 为此,请在构造 CFileDialog 之后(但在调用 DoModal 之前)将 m_ofn.lpstrFile 替换为已分配的缓冲区的指针。

此外,必须使用 m_ofn.lpstrFile 所指向的缓冲区中的字符数来设置 m_ofn.nMaxFile。 如果将要选择的最大文件数设置为 n,则所需的缓冲区大小为 n * (_MAX_PATH + 1) + 1。 缓冲区中返回的第一项是所选文件所在的文件夹的路径。 对于 Windows Vista 或更高版本的样式的对话框,目录和文件名字符串会以 null 结尾,在最后一个文件名后面会加上额外的 null 字符。 此格式使资源管理器样式的对话框能够返回包含空格的长文件名。 对于旧样式对话框,目录和文件名字符串用空格分隔,对于带空格的文件名,此函数使用短文件名。

以下示例演示如何使用缓冲区检索并列出多个文件名。

#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++;
  }
}

若要更改缓冲区大小以响应用户选择多个文件名的情况,必须从 CFileDialog 派生一个新类并重写 CFileDialog::OnFileNameChange 方法。

如果从 CFileDialog 派生新类,则可使用消息映射来处理任何消息。 若要扩展默认消息处理,请从 CFileDialog 派生一个类,将消息映射添加到新类,并为新消息提供成员函数。 无需提供挂钩函数来自定义对话框。

若要自定义对话框,请从 CFileDialog 派生类,提供自定义对话框模板,并添加消息映射以处理来自扩展控件的通知消息。 将任何未处理的消息传递给基类。 无需自定义挂钩函数。

使用 Windows Vista 或更高版本样式的 CFileDialog 时,不能使用消息映射和对话框模板。 必须改用 COM 接口来实现类似的功能。

若要详细了解如何使用 CFileDialog,请参阅常见对话框类

继承层次结构

CObject

CCmdTarget

CWnd

CDialog

CCommonDialog

CFileDialog

要求

标头:afxdlgs.h

CFileDialog::AddCheckButton

向对话框添加复选按钮。

HRESULT AddCheckButton(
    DWORD dwIDCtl,
    const CString& strLabel,
    BOOL bChecked);

参数

dwIDCtl
要添加的复选按钮的 ID。

strLabel
复选按钮名称。

bChecked
一个布尔值,指示复选按钮的当前状态。 如果选中,则为 TRUE;否则为 FALSE

备注

CFileDialog::AddComboBox

向对话框添加组合框。

HRESULT AddComboBox(DWORD dwIDCtl);

参数

dwIDCtl
要添加的组合框的 ID。

注解

CFileDialog::AddControlItem

将项添加到对话框中的容器控件。

HRESULT AddControlItem(
    DWORD dwIDCtl,
    DWORD dwIDItem,
    const CString& strLabel);

参数

dwIDCtl
要向其添加项的容器控件的 ID。

dwIDItem
项的 ID。

strLabel
项的文本。

备注

CFileDialog::AddEditBox

向对话框添加编辑框。

HRESULT AddEditBox(
    DWORD dwIDCtl,
    const CString& strText);

参数

dwIDCtl
要添加的编辑框的 ID。

strText
编辑框名称。

注解

CFileDialog::AddMenu

向对话框添加菜单。

HRESULT AddMenu(
    DWORD dwIDCtl,
    const CString& strLabel);

参数

dwIDCtl
要添加的菜单的 ID。

strLabel
菜单名称。

注解

CFileDialog::AddPlace

将文件夹添加到可供用户打开或保存项的位置列表中。

void AddPlace(
    LPCWSTR lpszFolder,
    FDAP fdap = FDAP_TOP) throw();

void AddPlace(
    IShellItem* psi,
    FDAP fdap = FDAP_TOP) throw();

参数

lpszFolder
要提供给用户的文件夹的路径。 这只能是文件夹。

fdap
指定文件夹在列表中的放置位置。

psi
指向 IShellItem(表示要提供给用户的文件夹)的指针。 这只能是文件夹。

备注

CFileDialog::AddPushButton

向对话框添加按钮。

HRESULT AddPushButton(
    DWORD dwIDCtl,
    const CString& strLabel);

参数

dwIDCtl
要添加的按钮的 ID。

strLabel
按钮名称。

备注

CFileDialog::AddRadioButtonList

将选项按钮(也称单选按钮)组添加到对话框。

HRESULT AddRadioButtonList(DWORD dwIDCtl);

参数

dwIDCtl
要添加的选项按钮组的 ID。

注解

CFileDialog::AddSeparator

向对话框添加分隔符。

HRESULT AddSeparator(DWORD dwIDCtl);

参数

dwIDCtl
要添加的分隔符的 ID。

备注

CFileDialog::AddText

向对话框添加文本。

HRESULT AddText(
    DWORD dwIDCtl,
    const CString& strText);

参数

dwIDCtl
要添加的文本的 ID。

strText
文本名称。

备注

CFileDialog::ApplyOFNToShellDialog

更新 CFileDialog 的当前状态,具体取决于 m_ofn 数据结构中存储的值。

void ApplyOFNToShellDialog();

备注

在 Windows Vista 之前的 Windows 版本中,成员 OPENFILENAME 数据结构与 CFileDialog 的状态持续同步。 对 m_ofn 成员变量所做的任何更改都会立即反映在对话框的状态中。 此外,对对话框状态进行更改时,会立即更新 m_ofn 成员变量。

在 Windows Vista 或更高版本中,不保证将 m_ofn 成员变量中的值和 CFileDialog 的状态同步。 此函数强制更新 CFileDialog 的状态,使之与 m_ofn 结构匹配。 Windows 在 CFileDialog::DoModal 期间自动调用此函数。

若要详细了解如何在 Windows Vista 或更高版本下使用 CFileDialog 类,请参阅 CFileDialog 类

示例

请参阅 CFileDialog::UpdateOFNFromShellDialog 的示例。

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);

参数

bOpenFileDialog
[in] 参数,指定要创建的对话框类型。 将其设置为 TRUE 可构造“文件 > 打开”对话框。 将其设置为 FALSE 可构造“文件 > 另存为”对话框。

lpszDefExt
[in] 默认的文件扩展名。 如果用户未在“文件名”框中包括已知扩展名(在用户的计算机上存在关联的扩展名),会将通过 lpszDefExt 指定的扩展名自动追加到文件名中。 如果此参数为 NULL,则不会追加任何扩展名。

lpszFileName
[in] “文件名”框中显示的初始文件名。 如果为 NULL,则不会显示初始文件名。

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

lpszFilter
[in] 一系列字符串对,用于指定可应用于文件的筛选器。 如果指定文件筛选器,则只有与筛选条件匹配的文件才会显示在“文件”列表中。 请参阅“注解”部分,详细了解如何使用文件筛选器。

pParentWnd
[in] 一个指针,指向文件对话框的父窗口或所有者窗口。

dwSize
[in] OPENFILENAME 结构的大小。 此值取决于操作系统版本。 MFC 使用了此参数来确定要创建的相应对话框类型。 默认大小为 0 表示 MFC 代码将根据运行程序的操作系统版本确定要使用的正确的对话框大小。

bVistaStyle
[in] 注意 此参数在 Visual Studio 2008 及更高版本中可用,因此,仅当你在 Windows Vista 或更高版本中运行时,才使用新样式对话框。

指定文件对话框样式的参数。 将其设置为 TRUE 可使用新 Vista 样式文件对话框。 否则将使用旧样式的对话框。 请参阅“注解”部分,详细了解如何在 Vista 下运行。

注解

将构造“文件 > 打开”或“文件 > 另存为”对话框,具体取决于 bOpenFileDialog 的值。

使用 lpszDefExt 指定默认扩展名可能不会产生预期的行为,因为很难预测哪些扩展名在用户的计算机上存在文件关联。 如果需要对追加默认扩展名的操作进行更多控制,则可从 CFileDialog 派生你自己的类,并重写 CFileDialog::OnFileNameOK 方法以执行你自己的扩展名处理操作。

若要让用户能够选择多个文件,请在调用 DoModal 之前设置 OFN_ALLOWMULTISELECT 标志。 必须提供自己的文件名缓冲区才能存储返回的包含多个文件名的列表。 为此,请在构造 CFileDialog 之后(但在调用 DoModal 之前)将 m_ofn.lpstrFile 替换为已分配的缓冲区的指针。 此外,必须使用 m_ofn.lpstrFile 所指向的缓冲区中的字符数来设置 m_ofn.nMaxFile。 如果将要选择的最大文件数设置为 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' 来分隔字符串,而不应使用垂直条 ('|')。

仅当在 Windows Vista 或更高版本中运行时,bVistaStyle 参数才适用。 在早期版本的 Windows 中,会忽略此参数。 如果将 bVistaStyle 设置为 TRUE,则使用 Visual Studio 2008 或更高版本编译程序时,将使用新的 Vista 样式文件对话框。 否则,将使用以前的 MFC 样式文件对话框

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

示例

请参阅 CFileDialog::DoModal 的示例。

CFileDialog::DoModal

调用此函数可显示 Windows 通用文件对话框,并允许用户浏览文件和目录并输入文件名。

virtual INT_PTR DoModal();

返回值

IDOK 或 IDCANCEL。 如果返回 IDCANCEL,请调用 Windows CommDlgExtendedError 函数以确定是否发生了错误。

IDOK 和 IDCANCEL 是常量,指示用户选择的是“确定”还是“取消”按钮。

注解

如果要通过设置 m_ofn 结构的成员来初始化各种文件对话框选项,则应在调用 DoModal 之前但在构造对话框对象之后执行此操作。

例如,如果要允许用户选择多个文件,请在调用 DoModal 之前设置 OFN_ALLOWMULTISELECT 标志,如本主题中的代码示例所示。

当用户单击对话框的“确定”或“取消”按钮或者从对话框的控制菜单中选择“关闭”选项时,控制将返回到应用程序。 然后,你可以调用其他成员函数来检索用户在对话框中输入的设置或信息。

DoModal 是从类 CDialog 重写的虚拟函数。

示例

void CMyClass::OnFileOpen()
{
   // szFilters is a text string that includes two file name filters:
   // "*.my" for "MyType Files" and "*.*' for "All Files."
   TCHAR szFilters[]= _T("MyType Files (*.my)|*.my|All Files (*.*)|*.*||");

   // Create an Open dialog; the default file name extension is ".my".
   CFileDialog fileDlg(TRUE, _T("my"), _T("*.my"),
      OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, szFilters);
   
   // Display the file dialog. When user clicks OK, fileDlg.DoModal() 
   // returns IDOK.
   if(fileDlg.DoModal() == IDOK)
   {
      CString pathName = fileDlg.GetPathName();
   
      // Implement opening and reading file in here.

      //Change the window's title to the opened file's title.
      CString fileName = fileDlg.GetFileTitle();
   
      SetWindowText(fileName);
   }
}

CFileDialog::EnableOpenDropDown

在对话框中的“打开”或“保存”按钮上启用下拉列表。

HRESULT EnableOpenDropDown(DWORD dwIDCtl);

参数

dwIDCtl
下拉列表的 ID。

备注

CFileDialog::EndVisualGroup

停止将元素添加到对话框中的视觉对象组。

HRESULT EndVisualGroup();

返回值

如果成功,则返回 S_OK;否则返回错误值。

备注

CFileDialog::GetCheckButtonState

检索对话框中的复选按钮(复选框)的当前状态。

HRESULT GetCheckButtonState(
    DWORD dwIDCtl,
    BOOL& bChecked);

参数

dwIDCtl
复选框的 ID。

bChecked
复选框的状态。 TRUE 指示已选中;FALSE 指示未选中。

备注

CFileDialog::GetControlItemState

检索在对话框中找到的容器控件中的项的当前状态。

HRESULT GetControlItemState(
    DWORD dwIDCtl,
    DWORD dwIDItem,
    CDCONTROLSTATEF& dwState);

参数

dwIDCtl
容器控件的 ID。

dwIDItem
项的 ID。

dwState
对从 CDCONTROLSTATE 枚举(指示控件的当前状态)接收一个或多个值的变量的引用。

注解

CFileDialog::GetControlState

检索给定控件的当前可见性和启用状态。

HRESULT GetControlState(
    DWORD dwIDCtl,
    CDCONTROLSTATEF& dwState);

参数

dwIDCtl
控件的 ID。

dwState
对从 CDCONTROLSTATE 枚举(指示控件的当前状态)接收一个或多个值的变量的引用。

注解

CFileDialog::GetEditBoxText

检索编辑框控件中的当前文本。

HRESULT GetEditBoxText(
    DWORD dwIDCtl,
    CString& strText);

参数

dwIDCtl
编辑框的 ID。

strText
文本值。

备注

CFileDialog::GetFileExt

调用此函数可检索输入到对话框中的文件扩展名。

CString GetFileExt() const;

返回值

文件扩展名。

注解

例如,如果输入的文件的名称为 DATA.TXT,GetFileExt 会返回“TXT”。

如果 m_ofn.Flags 设置了 OFN_ALLOWMULTISELECT 标志,则此字符串包含一系列以 null 结尾的字符串,第一个字符串是所选文件组的目录路径,后跟用户选择的所有文件的名称。 若要检索文件路径名,请使用 GetStartPositionGetNextPathName 成员函数。

CFileDialog::GetFileName

调用此函数可检索输入到对话框中的文件名。

CString GetFileName() const;

返回值

文件的名称。

备注

文件名包括前缀和扩展名。 例如,对于文件 C:\FILES\TEXT.DAT,GetFileName 会返回“TEXT.DAT”。

如果 m_ofn.Flags 设置了 OFN_ALLOWMULTISELECT 标志,则应调用 GetStartPositionGetNextPathName 来检索文件路径名。

CFileDialog::GetFileTitle

调用此函数可检索输入到对话框中的文件标题。

CString GetFileTitle() const;

返回值

文件的标题。

备注

文件的标题仅包含其前缀,没有路径或扩展名。 例如,对于文件 C:\FILES\TEXT.DAT,GetFileTitle 会返回“TEXT”。

如果 m_ofn.Flags 设置了 OFN_ALLOWMULTISELECT 标志,则此字符串包含一系列以 null 结尾的字符串,第一个字符串是所选文件组的目录路径,后跟用户选择的所有文件的名称。 因此,请使用 GetStartPositionGetNextPathName 成员函数检索列表中的下一个文件名。

示例

请参阅 CFileDialog::DoModal 的示例。

CFileDialog::GetFolderPath

调用此成员函数可为资源管理器样式的“打开”或“另存为”常见对话框检索当前处于打开状态的文件夹或目录的路径。

CString GetFolderPath() const;

返回值

一个 CString 对象,其中包含当前处于打开状态的文件夹或目录。

备注

必须已使用 OFN_EXPLORER 样式创建对话框;否则,该方法会失败并出现断言。

只有在显示对话框时,才能调用此方法。 关闭对话框后,此函数将不再有效,该方法会失败并出现断言。

CFileDialog::GetIFileDialogCustomize

检索指向给定 CFileDialog 的内部 COM 对象的指针。

IFileDialogCustomize* GetIFileDialogCustomize();

返回值

指向 CFileDialog 的内部 COM 对象的指针。 你有责任正确地释放此指针。

备注

仅在 Windows Vista 或更高版本中使用此函数,其对象已将 bVistaStyle 设置为 TRUE。 如果在 bVistaStyle 为 FALSE 时使用此函数,它会在发布模式下返回 NULL,在调试模式下引发断言。

有关 IFileDialogCustomize 接口的详细信息,请参阅 IFileDialogCustomize

示例

此示例检索内部 COM 对象。 若要运行此代码示例,必须在 Windows Vista 或更高版本中对其进行编译。

// Get the interface pointer
IFileDialogCustomize *customDlgPtr = m_myFileDialogPtr->GetIFileDialogCustomize();

// Make sure that it is not null
if (customDlgPtr != NULL)
{
   //
   // Perform any interface functionality here
   //

   // Release the pointer
   customDlgPtr->Release();
}

CFileDialog::GetIFileOpenDialog

检索指向给定 CFileDialog 的内部 COM 对象的指针。

IFileOpenDialog* GetIFileOpenDialog();

返回值

指向 CFileDialog 的内部 COM 对象的指针。 你有责任正确地释放此指针。

备注

仅在 Windows Vista 或更高版本中使用此函数,其对象已将 bVistaStyle 设置为 TRUE。 如果 CFileDialog 不是“打开”对话框或者 bVistaStyle 已设置为 FALSE,此函数会返回 NULL。 在这最后一种情况下,该函数仅在发布模式下返回 NULL - 在调试模式下,它会引发断言。

有关 IFileOpenDialog 接口的详细信息,请参阅 IFileOpenDialog

示例

此示例检索内部 COM 对象。 若要运行此代码,必须在 Windows Vista 或更高版本中对其进行编译。

// Get the interface pointer
IFileOpenDialog * openDlgPtr = m_myFileDialogPtr->GetIFileOpenDialog();

// Make sure that it is not null
if ( openDlgPtr != NULL )
{
    //
    // Perform any interface functionality here
    //

    // Release the pointer
    openDlgPtr->Release();
}

CFileDialog::GetIFileSaveDialog

检索指向给定 CFileDialog 的内部 COM 对象的指针。

IFileSaveDialog* GetIFileSaveDialog();

返回值

指向 CFileDialog 的内部 COM 对象的指针。 你有责任正确地释放此指针。

备注

仅在 Windows Vista 或更高版本中使用此函数,其对象已将 bVistaStyle 设置为 TRUE。 如果 CFileDialog 不是“保存”对话框或者 bVistaStyle 已设置为 FALSE,此函数会返回 NULL。 在这最后一种情况下,该函数仅在发布模式下返回 NULL - 在调试模式下,它会引发断言。

有关 IFileSaveDialog 接口的详细信息,请参阅 IFileSaveDialog

示例

此示例检索内部 COM 对象。 若要运行此代码示例,必须在 Windows Vista 或更高版本中对其进行编译。

// Get the interface pointer
IFileSaveDialog *saveDlgPtr = m_myFileDialogPtr->GetIFileSaveDialog();

// Make sure that it is not null
if (saveDlgPtr != NULL)
{
   //
   // Perform any interface functionality here
   //

   // Release the pointer
   saveDlgPtr->Release();
}

CFileDialog::GetNextPathName

调用此函数可从对话框中选择的组检索下一个文件名。

CString GetNextPathName(POSITION& pos) const;

参数

pos
一个引用,引用由先前的 GetNextPathNameGetStartPosition 函数调用返回的 POSITION 值。 如果已到达列表末尾,则为 NULL。

返回值

文件的完整路径。

备注

文件名的路径包括文件的标题以及整个目录路径。 例如,对于文件 C:\FILES\TEXT.DAT,GetNextPathName 会返回“C:\FILES\TEXT.DAT”。 如果通过调用 GetStartPosition 建立初始位置,则可以在正向迭代循环中使用 GetNextPathName

如果所选内容仅包含一个文件,则返回该文件名。

CFileDialog::GetOFN

检索关联的 OPENFILENAME 结构。

const OPENFILENAME& GetOFN() const;

OPENFILENAME& GetOFN();

返回值

OPENFILENAME 结构。

备注

使用此函数的第二个版本初始化“文件 > 打开”或“文件 > 另存为”对话框的外观,这发生在构造该对话框之后,使用 DoModal 成员函数显示该对话框之前。 例如,可以将 m_ofnlpstrTitle 成员设置为你希望对话框具有的标题。

CFileDialog::GetPathName

调用此函数可检索输入到对话框中的文件完整路径。

CString GetPathName() const;

返回值

文件的完整路径。

备注

文件名的路径包括文件的标题以及整个目录路径。 例如,对于文件 C:\FILES\TEXT.DAT,GetPathName 会返回“C:\FILES\TEXT.DAT”。

如果 m_ofn.Flags 设置了 OFN_ALLOWMULTISELECT 标志,则此字符串包含一系列以 null 结尾的字符串,第一个字符串是所选文件组的目录路径,后跟用户选择的所有文件的名称。 因此,请使用 GetStartPositionGetNextPathName 成员函数检索列表中的下一个文件名。

示例

请参阅 CFileDialog::DoModal 的示例。

CFileDialog::GetReadOnlyPref

调用此函数可确定是否已在 Windows 的标准“文件 > 打开”和“文件 > 另存为”对话框中选中“只读”复选框。

BOOL GetReadOnlyPref() const;

返回值

如果选中对话框中的“只读”复选框,则为非零值;否则为 0。

备注

可以通过在 CFileDialog 构造函数中设置 OFN_HIDEREADONLY 样式来隐藏“只读”复选框。

注意

Windows Vista 或更高版本样式的 CFileDialog 对象不支持此函数。 尝试在 Windows Vista 或更高版本样式的 CFileDialog 上使用此函数会引发 CNotSupportedException

CFileDialog::GetResult

检索用户在对话框中所做的选择。

IShellItem* GetResult() throw();

返回值

一个指向 IShellItem(表示用户的选择)的指针。

备注

CFileDialog::GetResults

检索用户在某个允许多项选择的对话框中所做的选择。

IShellItemArray* GetResults() throw();

返回值

一个指向 IShellItemArray 的指针,可通过它访问对话框中选定的项。

注解

CFileDialog::GetSelectedControlItem

从对话框中的指定容器控件检索特定项。

HRESULT GetSelectedControlItem(
    DWORD dwIDCtl,
    DWORD& dwIDItem);

参数

dwIDCtl
容器控件的 ID。

dwIDItem
用户在控件中选择的项的 ID。

备注

CFileDialog::GetStartPosition

调用此成员函数可检索列表中第一个文件路径名的位置,前提是 m_ofn.Flags 设置了 OFN_ALLOWMULTISELECT 标志。

POSITION GetStartPosition() const;

返回值

可用于迭代的 POSITION 值;如果列表为空,则为 NULL。

CFileDialog::HideControl

调用此成员函数可隐藏资源管理器样式的“打开”或“另存为”常见对话框中的指定控件。

void HideControl(int nID);

参数

nID
要隐藏的控件的 ID。

备注

必须已使用 OFN_EXPLORER 样式创建对话框;否则,该函数会失败并出现断言。

CFileDialog::IsPickFoldersMode

确定当前对话框是否处于文件夹选取器模式。

BOOL IsPickFoldersMode() const;

返回值

如果对话框处于文件夹选取器模式,则为 TRUE;否则为 FALSE。

备注

CFileDialog::m_ofn

m_ofn 是类型为 OPENFILENAME 的结构。 此结构中的数据表示 CFileDialog 的当前状态。

备注

使用此结构初始化“文件 > 打开”或“文件 > 另存为”对话框的外观,这发生在构造该对话框之后,使用 DoModal 方法显示该对话框之前。 例如,可以将 m_ofn 的 lpstrTitle 成员设置为你希望对话框具有的标题。

使用 Windows Vista 或更高版本样式的 CFileDialog 时,m_ofn 不保证始终与对话框的状态匹配。 它与早期版本的 Windows 中的对话框同步。 请参阅 CFileDialog::ApplyOFNToShellDialogCFileDialog::UpdateOFNFromShellDialog,详细了解如何在 Windows Vista 或更高版本中同步 m_ofn 结构和 CFileDialog 状态。

Windows Vista 或更高版本样式的文件对话框不支持 CFileDialog 的某些成员和标志。 因此,这些项将无效。

下面是 Windows Vista 或更高版本不支持的成员的列表:

  • lpstrCustomFilter

  • lpstrInitialDir

  • lCustData

  • lpfnHook

  • lpTemplateName

以下标志不受支持,因此在你使用 Windows Vista 或更高版本样式的 CFileDialog 时无效:

  • OFN_ENABLEHOOK

  • OFN_ENABLEINCLUDENOTIFY

  • OFN_ENABLETEMPLATE

  • OFN_ENABLETEMPLATEHANDLE

  • OFN_EXPLORER

  • OFN_EXTENSIONDIFFERENT

  • OFN_HIDEREADONLY

  • OFN_LONGNAMES - 实际上始终在 Windows Vista 或更高版本中启用

  • OFN_NOLONGNAMES - 实际上始终在 Windows Vista 或更高版本中禁用

  • OFN_NONETWORKBUTTON - 实际上始终在 Windows Vista 或更高版本中启用

  • OFN_READONLY

  • OFN_SHOWHELP

有关此结构的详细信息,请参阅 Windows SDK 中的 OPENFILENAME 结构。

CFileDialog::MakeProminent

将某个控件放在对话框中,使其突出显示(相对于其他控件而言)。

HRESULT MakeProminent(DWORD dwIDCtl);

参数

dwIDCtl
控件的 ID。

备注

CFileDialog::OnButtonClicked

在单击按钮时调用。

virtual void OnButtonClicked(DWORD dwIDCtl);

参数

dwIDCtl
按钮的 ID。

备注

CFileDialog::OnCheckButtonToggled

在选中或取消选中复选框时调用。

virtual void OnCheckButtonToggled(
    DWORD dwIDCtl,
    BOOL bChecked);

参数

dwIDCtl
复选框的 ID。

bChecked
已选中或已取消选中。

备注

CFileDialog::OnControlActivating

在激活控件时调用。

virtual void OnControlActivating(DWORD dwIDCtl);

参数

dwIDCtl
控件的 ID。

备注

CFileDialog::OnFileNameChange

如果要处理 WM_NOTIFY CDN_SELCHANGE 消息,请重写此方法。

virtual void OnFileNameChange();

备注

当用户在“打开”或“另存为”对话框的文件列表中选择新文件或文件夹时,系统会发送 CDN_SELCHANGE 消息。 如果要执行响应此消息的任何操作,请重写此方法。

仅当对话框是在启用 OFN_EXPLORER 标志的情况下创建的时,系统才会发送此消息。 有关通知的详细信息,请参阅 CDN_SELCHANGE。 有关 OFN_EXPLORER 标志的信息,请参阅 OPENFILENAME 结构和“打开并另存为”对话框

CFileDialog::OnFileNameOK

仅当你想要提供已输入到通用文件对话框中的文件名的自定义验证时,才重写此函数。

virtual BOOL OnFileNameOK();

返回值

如果文件名不是有效的文件名,则为 1;否则为 0。

注解

使用此函数,你可以出于任何特定于应用程序的原因拒绝某个文件名。 通常无需使用此函数,因为框架会提供对文件名的默认验证,并会在输入无效文件名时显示消息框。

如果返回 1,该对话框会保持显示状态,以便用户输入另一个文件名。 如果返回值为 0,则对话框过程会关闭该对话框。 其他非零返回值目前为保留值,不应使用。

CFileDialog::OnFolderChange

重写此函数以处理 WM_NOTIFYCDN_FOLDERCHANGE 消息。

virtual void OnFolderChange();

备注

在“打开”或“另存为”对话框中打开新文件夹时,会发送通知消息。

只有在使用 OFN_EXPLORER 样式创建对话框时,才会发送通知。 有关通知的详细信息,请参阅 CDN_FOLDERCHANGE。 有关 OFN_EXPLORER 样式的信息,请参阅 OPENFILENAME 结构和“打开并另存为”对话框

CFileDialog::OnInitDone

重写此函数以处理 WM_NOTIFY CDN_INITDONE 消息。

virtual void OnInitDone();

注解

当系统在“打开”或“另存为”对话框中排列好控件,为子对话框的控件腾出空间时,系统会发送此通知消息。

只有在使用 OFN_EXPLORER 样式创建对话框时,系统才会发送此通知消息。 有关通知的详细信息,请参阅 CDN_INITDONE。 有关 OFN_EXPLORER 样式的信息,请参阅 OPENFILENAME 结构和“打开并另存为”对话框

注意

Windows Vista 或更高版本样式的文件对话框不支持此函数。 尝试在 Windows Vista 或更高版本样式的文件对话框上使用此函数会引发 CNotSupportedException

CFileDialog::OnItemSelected

在选择容器项时调用。

virtual void OnItemSelected(
    DWORD dwIDCtl,
    DWORD dwIDItem);

参数

dwIDCtl
容器控件的 ID。

dwIDItem
项的 ID。

备注

CFileDialog::OnLBSelChangedNotify

每当列表框中的当前选定内容即将更改时,会调用此函数。

virtual void OnLBSelChangedNotify(
    UINT nIDBox,
    UINT iCurSel,
    UINT nCode);

参数

nIDBox
进行选择时所在的列表框或组合框的 ID。

iCurSel
当前选择内容的索引。

nCode
控件通知代码。 此参数必须具有以下值之一:

  • CD_LBSELCHANGE:指定 iCurSel 是单选列表框中的选定项。

  • CD_LBSELSUB:指定在多选列表框中不再选择 iCurSel

  • CD_LBSELADD:指定在多选列表框中选择 iCurSel

  • CD_LBSELNOITEMS:指定多选列表框中不存在任何选择。

注解

重写此函数可在列表框中提供对选项内容更改的自定义处理。 例如,可以使用此函数显示用户选择的每个文件的访问权限或上次修改日期。

CFileDialog::OnShareViolation

重写此函数可提供对共享冲突的自定义处理。

virtual UINT OnShareViolation(LPCTSTR lpszPathName);

参数

lpszPathName
发生共享冲突的文件的路径。

返回值

以下值之一:

  • OFN_SHAREFALLTHROUGH:从对话框中返回文件名。

  • OFN_SHARENOWARN:无需采取进一步操作。

  • OFN_SHAREWARN:用户收到此错误的标准警告消息。

备注

通常不需要使用此函数,因为框架提供对共享冲突的默认检查,并在发生共享冲突时显示消息框。

如果要禁用共享冲突检查,请使用按位与运算符将标志 OFN_SHAREAWARE 与 m_ofn.Flags 配合使用。

CFileDialog::OnTypeChange

重写此函数以处理 WM_NOTIFYCDN_TYPECHANGE 消息。

virtual void OnTypeChange();

备注

当用户从“打开”或“另存为”对话框中的文件类型列表中选择一个新文件类型时,系统会发送通知消息。

只有在使用 OFN_EXPLORER 样式创建对话框时,才会发送通知。 有关通知的详细信息,请参阅 CDN_TYPECHANGE。 有关 OFN_EXPLORER 样式的信息,请参阅 OPENFILENAME 结构和“打开并另存为”对话框

CFileDialog::RemoveControlItem

将项从对话框的容器控件中删除。

HRESULT RemoveControlItem(
    DWORD dwIDCtl,
    DWORD dwIDItem);

参数

dwIDCtl
要从中删除项的容器控件的 ID。

dwIDItem
项的 ID。

备注

CFileDialog::SetCheckButtonState

设置对话框中的复选按钮(复选框)的当前状态。

HRESULT SetCheckButtonState(
    DWORD dwIDCtl,
    BOOL bChecked);

参数

dwIDCtl
复选框的 ID。

bChecked
复选框的状态。 TRUE 指示已选中;FALSE 指示未选中。

备注

CFileDialog::SetControlItemState

设置在对话框中找到的容器控件中的项的当前状态。

HRESULT SetControlItemState(
    DWORD dwIDCtl,
    DWORD dwIDItem,
    CDCONTROLSTATEF dwState);

参数

dwIDCtl
容器控件的 ID。

dwIDItem
项的 ID。

dwState
CDCONTROLSTATE 枚举(指示控件的新状态)中的一个或多个值。

备注

CFileDialog::SetControlItemText

设置控件项的文本。 例如,单选按钮或菜单中项附带的文本。

HRESULT SetControlItemText(
    DWORD dwIDCtl,
    DWORD dwIDItem,
    const CString& strLabel);

参数

dwIDCtl
容器控件的 ID。

dwIDItem
项的 ID。

strLabel
项的文本。

注解

CFileDialog::SetControlLabel

设置与控件关联的文本,例如按钮文本或编辑框标签。

HRESULT SetControlLabel(
    DWORD dwIDCtl,
    const CString& strLabel);

参数

dwIDCtl
控件的 ID。

strLabel
控件名称。

注解

CFileDialog::SetControlState

设置给定控件的当前可见性和启用状态。

HRESULT SetControlState(
    DWORD dwIDCtl,
    CDCONTROLSTATEF dwState);

参数

dwIDCtl
控件的 ID。

dwState
CDCONTROLSTATE 枚举(指示控件的当前状态)中的一个或多个值。

备注

CFileDialog::SetControlText

调用此方法可在资源管理器样式的“打开”或“另存为”对话框中设置指定控件的文本。

void SetControlText(
    int nID,
    LPCSTR lpsz);

void SetControlText(
    int nID,
    const wchar_t *lpsz);

参数

nID
[in] 要设置其文本的控件的 ID。

lpsz
[in] 一个指向字符串的指针,字符串中包含要为控件设置的文本。

注解

此函数的两个版本对于使用 Unicode 的应用程序都有效。 但是,只有 LPCSTR 类型的版本对使用 ANSI 的应用程序有效。

若要使用此方法,必须创建 OFN_EXPLORER 样式的对话框。 否则,函数会失败并显示断言。

CFileDialog::SetDefExt

调用此函数可为资源管理器样式的“打开”或“另存为”常见对话框设置默认文件扩展名。

void SetDefExt(LPCSTR lpsz);

参数

lpsz
一个指向字符串的指针,字符串中包含用于对话框对象的默认扩展。 此字符串不得包含句点 (.)。

注解

必须已使用 OFN_EXPLORER 样式创建对话框;否则,该函数会失败并出现断言。

CFileDialog::SetEditBoxText

设置编辑框控件中的当前文本。

HRESULT SetEditBoxText(
    DWORD dwIDCtl,
    const CString& strText);

参数

dwIDCtl
编辑框的 ID。

strText
文本值。

注解

CFileDialog::SetProperties

提供一个属性存储,它定义将默认值用于正在保存的项。

BOOL SetProperties(LPCWSTR lpszPropList);

参数

lpszPropList
由“;”分隔的预定义的属性列表。 对于标志列表,请参阅 OPENFILENAME 的 Flags 节。

注解

CFileDialog::SetSelectedControlItem

在对话框中找到的选项按钮组或组合框中设置特定项的选定状态。

HRESULT SetSelectedControlItem(
    DWORD dwIDCtl,
    DWORD dwIDItem);

参数

dwIDCtl
容器控件的 ID。

dwIDItem
用户在控件中选择的项的 ID。

注解

CFileDialog::SetTemplate

设置 CFileDialog 对象的对话框模板。

void SetTemplate(
    UINT nWin3ID,
    UINT nWin4ID);

void SetTemplate(
    LPCTSTR lpWin3ID,
    LPCTSTR lpWin4ID);

参数

nWin3ID
[in] 包含非资源管理器 CFileDialog 对象的模板资源的 ID 号。 此模板仅在 Windows NT 3.51 上使用,或在不存在 OFN_EXPLORER 样式时使用。

nWin4ID
[in] 包含资源管理器 CFileDialog 对象的模板资源的 ID 号。 此模板仅在 Windows NT 4.0 及更高版本和 Windows 95 及更高版本上使用,或在 OFN_EXPLORER 样式存在时使用。

lpWin3ID
[in] 包含非资源管理器 CFileDialog 对象的模板资源的名称。 此模板仅在 Windows NT 3.51 上使用,或在不存在 OFN_EXPLORER 样式时使用。

lpWin4ID
[in] 包含资源管理器 CFileDialog 对象的模板资源的名称。 此模板仅在 Windows NT 4.0 及更高版本和 Windows 95 及更高版本上使用,或在 OFN_EXPLORER 样式存在时使用。

备注

系统将仅使用指定模板之一。 系统根据存在的 OFN_EXPLORER 样式和运行应用程序的操作系统来确定要使用的模板。 通过同时指定非资源管理器样式模板和资源管理器样式模板,可以轻松支持 Windows NT 3.51、Windows NT 4.0 及更高版本和 Windows 95 及更高版本。

注意

Windows Vista 或更高版本样式的文件对话框不支持此函数。 尝试在 Windows Vista 或更高版本样式的文件对话框上使用此函数会引发 CNotSupportedException。 还可使用自定义对话框。 若要详细了解如何使用自定义 CFileDialog,请参阅 IFileDialogCustomize

CFileDialog::StartVisualGroup

在对话框中声明视觉对象组。 对任何“add”方法的后续调用会将这些元素添加到此组。

HRESULT StartVisualGroup(
    DWORD dwIDCtl,
    const CString& strLabel);

参数

dwIDCtl
视觉对象组的 ID。

strLabel
组名称。

备注

CFileDialog::UpdateOFNFromShellDialog

根据内部对象的当前状态更新 CFileDialogm_ofn 数据结构。

void UpdateOFNFromShellDialog();

备注

在 Windows Vista 之前的 Windows 版本中,成员 OPENFILENAME 数据结构与 CFileDialog 的状态持续同步。 对 m_ofn 成员变量所做的任何更改都直接影响到对话框的状态。 此外,对对话框状态进行更改时,会立即更新 m_ofn 成员变量。

在 Windows Vista 或更高版本中,m_ofn 数据结构不会自动更新。 若要保证 m_ofn 成员变量中的数据的准确性,应在访问数据之前调用 UpdateOFNFromShellDialog 函数。 Windows 在处理 IFileDialog::OnFileOK 的过程中自动调用此函数。

若要详细了解如何在 Windows Vista 或更高版本下使用 CFileDialog 类,请参阅 CFileDialog 类

示例

本示例先更新 CFileDialog,然后再显示它。 在更新 m_ofn 成员变量之前,我们需要将其同步到对话框的当前状态。

// Update the m_ofn variable
m_myFileDialogPtr->UpdateOFNFromShellDialog();

// Change the title
m_myFileDialogPtr->m_ofn.lpstrTitle = L"New Dialog Title";

// Apply the changes
m_myFileDialogPtr->ApplyOFNToShellDialog();

// Show the window
LRESULT result = m_myFileDialogPtr->DoModal();

另请参阅

CCommonDialog 类
层次结构图