PocketPC 2002 的文件打开对话框






4.86/5 (33投票s)
一个完整的浏览式文件打开对话框的实现。
引言
在 PocketPC 上,文件打开对话框的功能不是很强大。实际上,你只能访问少量目录,这可能对你的目的有所限制。在阅读了 Mobile / Embedded 论坛中的一篇帖子后,我开始考虑这个问题的可能解决方案,一位读者抱怨了 CFileDialog
的限制。
本文介绍了一种通过实现更高级的文件打开对话框来解决此问题的方法。
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 中的第二个版本,具有以下更新
- 设备名称显示在树视图中。
- 文件列表现在支持文件图标。
- OK 和 Cancel 按钮已替换为工具栏按钮(取消按钮不是很漂亮,但是 - 我不是图形设计师)
- 视图可以在拆分视图、树视图和列表视图之间切换。
- 你可以通过单击和拖动来移动树和列表之间的拆分。
2003 年 3 月 27 日
在 CodeProject 中首次发布。
谢谢
Amit Dey 提供了代码和使用系统图像列表的想法。此外,当第一次尝试时我完全搞砸时,他提供了指导。