CFileDialog选件类
封装为文件使用打开或文件保存操作的通用对话框。
class CFileDialog : public CCommonDialog
成员
公共构造函数
名称 |
描述 |
---|---|
构造 CFileDialog 对象。 |
公共方法
名称 |
描述 |
---|---|
添加一个检查按钮添加到对话框。 |
|
添加一个组合框添加到对话框。 |
|
添加一个项添加到对话框的容器控件。 |
|
添加一个编辑框添加到对话框。 |
|
添加一个菜单。对话框。 |
|
已重载。 添加文件夹到具有列出可供用户可以打开或保存项目。 |
|
将一个按钮添加到对话框。 |
|
添加一个选项键 (也称作单选按钮) 组添加到对话框。 |
|
添加一个分隔符到对话框。 |
|
添加文本内容添加到对话框。 |
|
更新 CFileDialog 的状态与 m_ofn 成员变量和标志存储的参数。 |
|
显示对话框并使用户进行选择。 |
|
在对话框中的 打开 或 保存 按钮将启用下拉列表。 |
|
停止元素的添加到对话的可视化组。 |
|
获取一个检查按钮 (复选框) 的当前状态。对话框。 |
|
获取一个项的当前状态在对话框中的容器控件的。 |
|
获取特定控件的当前可见性并启用状态。 |
|
获取在编辑框控件的当前文本。 |
|
返回选定的文件扩展名。 |
|
返回选定的文件的文件名。 |
|
返回选定的文件的标题。 |
|
检索当前打开的文件夹或目录的路径一资源管理器样式的 打开 或 另存为 通用对话框的。 |
|
检索自定义的 CFileDialog 对象的内部 COM 对象。 |
|
检索用作 打开 文件"对话框 CFileDialog 的内部 COM 对象。 |
|
检索用作 保存 文件"对话框 CFileDialog 的内部 COM 对象。 |
|
返回下选择的文件的完整路径。 |
|
检索 CFileDialog 对象的 OPENFILENAME 结构。 |
|
返回选定的文件的完整路径。 |
|
返回选定的文件的只读状态。 |
|
获取用户在对话框中做出的选择。 |
|
获取在允许多重选择的对话框中的选择。 |
|
从在对话框中指定的容器控件获取特定项目。 |
|
返回文件名的第一个元素的位置列表中。 |
|
在一资源管理器样式的 打开 或 另存为 通用对话框隐藏指定的控件。 |
|
是否在文件夹选择器模式确定当前对话框。 |
|
在对话框中放置一个控件,以便突出显示与其他添加的控件比较。 |
|
在对话框的容器控件移除项。 |
|
一个检查按钮 (复选框) 的当前状态。对话框。 |
|
设置一个项的当前状态在对话框中的容器控件的。 |
|
设置控件的项的文本。 例如,附带一个单选按钮或项目在菜单的文本。 |
|
将文本与一个控件,如按钮文本或编辑框标签。 |
|
设置特定控件的当前可见性并启用状态。 |
|
设置指定控件的文本在一资源管理器样式的 打开 或 另存为 通用对话框。 |
|
设置一资源管理器样式的 打开 或 另存为 通用对话框的默认文件扩展名。 |
|
设置在编辑框控件的当前文本。 |
|
提供定义为项目的默认保存的属性存储。 |
|
在选项按钮组中设置特定项目的选定状态或组合框在对话框中找到。 |
|
设置 CFileDialog 对象的对话框模板。 |
|
声明对话框的可视化组。 以后对任何“添加”方法将那些元素添加到此组。 |
|
更新在 m_ofn 成员变量存储的数据与文件对话框的当前状态。 |
受保护的方法
名称 |
描述 |
---|---|
调用,当单击该按钮。 |
|
调用,如果复选框处于选中/取消选中。 |
|
调用,当控件处于活动状态。 |
|
处理 WM_NOTIFY CDN_SELCHANGE 消息。 |
|
验证在对话框中输入的文件名。 |
|
处理 WM_NOTIFY CDN_FOLDERCHANGE 消息。 |
|
处理 WM_NOTIFY CDN_INITDONE 消息。 |
|
调用,当容器选择项。 |
|
文件时,在选择发生更改时,可以执行自定义操作。 |
|
处理共享冲突。 |
|
处理 WM_NOTIFY CDN_TYPECHANGE 消息。 |
公共数据成员
名称 |
描述 |
---|---|
Windows OPENFILENAME 结构。 提供对基本的文件对话框参数。 |
备注
常用文件对话框允许使用 Windows 标准一致的已实现文件选择对话框,例如,打开文件 和 另存为,有些。
可以使用 CFileDialog 使用提供的构造函数,也可从 CFileDialog 和写入派生自己的对话框选件类构造函数以满足您的要求。 在任何情况下,因为它们是从派生 CCommonDialog选件类,这些对话框中的行为与标准 MFC 对话框。 CFileDialog 依赖于 Windows 中包含的 COMMDLG.DLL 文件。
外观和 CFileDialog 的功能和 Windows Vista 与 Windows 的早期版本有所不同。 如果程序编译并运行在 Windows Vista下,默认值 CFileDialog 自动使用新 Windows Vista 样式,而无需代码更改。 使用 bVistaStyle 参数在构造函数中手动重写此自动更新。 对自动更新的例外情况是自定义对话框。 它们不会转换为新样式。 有关构造函数的更多信息,请参见 CFileDialog::CFileDialog。
备注
当您使用 CFileDialog时,控件 ID 系统在 Windows Vista 不同于 Windows 的早期版本。然后才能端口需要从 Windows 之前,的早期版本的项目必须更新所有引用。CFileDialog 代码中的控件。
某些 CFileDialog 方法不支持在 Windows Vista下。 检查单个方法主题有关的信息方法是否支持。 此外,以下继承的功能不支持在 Windows Vista下:
CFileDialog 选件类的窗口消息会因什么操作系统使用。 例如,Windows XP 不支持 CDialog::OnCancel 和 CDialog::OnOKCFileDialog 选件类的。 但是,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 生成 断言。
CFileDialog 包含允许您执行自定义处理共享冲突、文件名验证和列表框更改通知的多个受保护的成员。 这些受保护成员是回调函数大多数应用程序不必使用,因为默认处理自动执行。 这些功能的消息映射项,因为它们是标准虚函数,则不需要。
可以使用 Windows CommDlgExtendedError 函数确定错误是否在对话框的初始化时生成并了解有关该错误。
CFileDialog 对象析构自动处理。 您不必调用 CDialog::EndDialog。
在调用 DoModal之前,若要允许用户选择的多个文件,请设置 OFN_ALLOWMULTISELECT 标志。 您必须提供自己的文件名缓冲区容纳返回的列表多文件的名称。 通过替换 m_ofn.lpstrFile 执行此操作。指针到分配的缓冲区,在构造 CFileDialog后,但,在调用 DoModal之前。
此外,还必须设置 m_ofn.nMaxFile 使用字符数缓冲区中的指向由 m_ofn.lpstrFile。 如果设置要选择的文件的最大数目。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派生选件类,提供了一个自定义对话框模板,并将消息映射处理从扩展控件的通知消息。 通过任何未处理的消息给基类。 您不必自定义挂钩函数。
当您使用 CFileDialog的 Windows Vista 样式时,不能使用消息映射和对话框模板。 相反,您必须具有类似的功能使用 COM 接口。
有关如何使用 CFileDialog的更多信息,请参见用于通用对话框选件类。
继承层次结构
CFileDialog
要求
**标头:**afxdlgs.h