高级文件打开对话框实现

在许多应用程序中,文件对话框是用户与系统交互的重要部分。然而,标准的文件对话框可能无法满足所有需求,尤其是在移动或嵌入式系统中。本文将介绍一种通过CFileOpenDlg类实现的更高级文件打开对话框的解决方案。

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类才能在对话框中打印标题。此代码在很大程度上基于先前的技术,可以在以下文章中找到:如何在控制面板属性页中创建对话框标题?

当前有一些限制,将在未来的更新中解决:

  • 按需加载目录树。当前的加载是一步完成的,如果有一个复杂的目录树,这将导致操作变慢。通过按需加载树,可以大大减少启动时间和内存消耗。
  • 文件排序。当前对话框不支持文件排序。
  • 2004年1月26日:在CodeProject上发布了第三次更新,包括以下更新:按需加载文件夹树。文件夹使用系统图像列表图标。文件列表现在支持在任何列上进行排序(升序和降序)。排序列显示浅灰色背景,标题显示反映排序方向的箭头。
  • 2003年5月15日:移除了对错误#include和符号的引用。
  • 2003年5月14日:在CodeProject上发布了第二次更新,包括以下更新:在树视图中报告设备名称。文件列表现在支持文件图标。确定和取消按钮被替换为工具栏按钮(取消按钮不是很好,但嘿 - 不是图形设计师)。可以在拆分视图、树视图和列表视图之间切换视图。可以通过点击和拖动来移动树和列表之间的拆分。
  • 2003年3月27日:在CodeProject上发布了第一次。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485