在许多应用程序中,文件对话框是用户与系统交互的重要部分。然而,标准的文件对话框可能无法满足所有需求,尤其是在移动或嵌入式系统中。本文将介绍一种通过CFileOpenDlg类实现的更高级文件打开对话框的解决方案。
CFileOpenDlg类在示例应用程序中实现,其用法非常简单。以下是一个简单的使用示例:
void CChildView::OnFileOpen() {
CFileOpenDlg dlg;
if (IDOK == dlg.DoModal()) {
CString strFullPath(dlg.GetPath());
strFullPath += dlg.GetFileName();
MessageBox(strFullPath);
}
}
要获取完整路径名,需要将GetPath()和GetFileName()返回的路径和文件名拼接起来。
文件过滤是通过SetFilter方法设置的。默认情况下,对话框使用SetFilter("*"),显示所有文件。请注意,此过滤器仅影响文件浏览,不影响目录浏览。
遗憾的是,这个类并不完全封装,因为它需要一些资源,即列表头部和对话框本身的位图。将此代码移植到应用程序时,可能需要一些剪切和粘贴。此外,还需要CExDialog和CExDlgEngine类才能在对话框中打印标题。此代码在很大程度上基于先前的技术,可以在以下文章中找到:如何在控制面板属性页中创建对话框标题?
当前有一些限制,将在未来的更新中解决: