您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:85 来源:vckbase.com

本文章共5773字,分4页,当前第4页,快速翻页:
 
Figure 5 具体实现代码和 Figure 6。CFolderDialog 在内部实现了自己的 IFolderFilter,也就是调用对应的虚拟函数。CFolderDialog::OnIUnknown 使用了活动模板库(ATL)CComQIPtr 智能指针类,它使得 COM 编码轻而易举。
逆风者
  如果你决定用定制的过滤器,要小心,因为它改写了 BIF_RETURNONLYFSDIRS 这样的标志(只返回文件系统目录)。出于好玩,我决定当所选的项目不是文件系统目录时,通过手动禁用 OK 按钮,自己为 FolderPick 实现 BIF_RETURNONLYFSDIRS。为了检查文件系统对象,你要考虑适当的方式调用 IShellFolder::GetAttributesOf 并寻找 SFGAO_FILESYSTEM。但是当我尝试这样做的时候,“我的电脑”得到的是SFGAO_FILESYSTEM 属性,尽管它并非真正的文件系统目录!后来,我发现要想知道某个外壳对象是否为真正的文件或文件夹,唯一可靠的方法是调用 GetPathName 并检查串是否为空。在 CMyFolderDialog 中我就是这么做的,一旦碰到非文件夹则禁用 OK 按钮。具体细节请参考下载的源代码。
  最后,为了帮助你理解来龙去脉,我对运行时的 CFolderDialog 进行了 TRACE 跟踪诊断。如图 Figure 6 所示。


Figure 6 TraceWin

  你可以通过设置 CFolderDialog::bTRACE 全局变量对诊断进行开/关控制。当然,跟踪只能在调试模式进行。下载的代码中附带有 TraceWin 的免费拷贝,以便不用运行调试器就能察看诊断输出。
  SHBrowseForFolder 还有许多标志和特性我没有发掘,但是不论你使用哪种特性,CFolderDialog 都能减轻你的工作负担并让你能用 MFC 的方式来编写使用 SHBrowseForFolder 的程序。

祝编程愉快!

您的提问和评论可发送到 Paul 的信箱:cppqa@microsoft.com
 

作者简介
  Paul DiLascia 是一名自由作家,顾问和 Web/UI 设计者。他是《Writing Reusable Windows Code in C 》书(Addison-Wesley, 1992)的作者。通过 http://www.dilascia.com 可以获得更多了解。   本文出自 MSDN Magazine June 2005 期刊,可通过当地报摊获得,或者最好是 订阅  
 
本文章更多内容<<上一页 - 1 - 2 - 3 - 4
相关文章

PE文件格式详解(下)
GDI和GDI 对象的相互转换
软件框架的利器、TangramMini组件应用教程二
C语言高效编程的几招
VC 操作 SQL Server 主从表
软件测试悖论
如何在 C# 中加载自己编写的动态链接库
DLL头文件的格式和应用
用 Web 服务进行二进制序列化和 BinaryForm
QQ2006 界面编程之鸡蛋里挑骨头
基于MFC对话框的NT服务程序框架
关于控件注册和使用许可问题的解决办法
汉诺塔游戏的设计
Spy++原理初探
WIN32程序挂钩SetLastError,输出错误描述到
超强仿QQ自动伸缩窗口
VC实用小知识总结 (一)
VC实用小知识总结 (二)
BMP图象解析
让你的软件界面更漂亮(五)

相关评论


本文章所属分类:首页 VC++

  热门关键字: