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