Shell Programming Tips

这篇笔记基于对Delphi 7自带ShellControl源代码的分析,看了不少MFC实现的类Explorer里的Shell控件,BCG,CjLib的,但都没有Delphi的Shell控件做的完美,比如TShellListView可以自动取得系统中语言相关的字符,如"名称","大小","修改日期",在英文系统中自变成"Name","Size",感觉很不错!分析一下它的代码,写下关键的地方,防止忘记,现在记忆力大不如前了啊.

1.得到桌面文件夹对象的IShellFolder接口,后面的操作都依赖它
SHGetDesktopFolder

2.由文件(夹)名得到IDLIST,Shell编程里很多操作都要IDLIST
IShellFolder::ParseDisplayName

3.由IDLLIST得到IShellFolder对象接口
IShellFolder::BindToObject

4.由IDLIST得到显示名字,如C盘可能显示为"系统盘(c:)"
IShellFolder::GetDisplayNameOf,StrRetToStr

5.枚举文件夹内容,如文件和子目录等
IShellFolder::EnumObjects

6.由IDLIST或文件(夹)名取得系统图像列表,及其它信息
SHGetFileInfo

可以为CTreeCtrl,CListCtrl及CComboBoxEx设置取得的各ImageLists
我想这里应该使用CustomDraw,在ItemData里设置IDLIST,在GetDispInfo
里返回各文件(夹)对象对应的ImageList索引,在界面上显示出来.

7.得到语言相关的Column标题
7.1 从桌面文件夹对象查询IShellFolder2接口,QueryInterface
7.2 IShellFolder2::GetDetailsOf
7.3 重上两步直到GetDetailsOf调用失败

8.使用Shell右键菜单
8.1 GetUIObjectOf取得IContextMenu对象
8.2 创建一个弹出菜单CreatePopupMenu
8.3 查询ContextMenu,IContextMenu::QueryContextMenu
8.4 TrackPopupMenu弹出菜单加TPM_RETURNCMD参数
8.5 根据返回的CommandID填写CMINVOKECOMMANDINFO结构
8.6 执行IContextMenu::InvokeCommand

就这些步骤比较关键,组合起来就可以做出Shell控件,如果不看别人的代码还真不知道从哪里可以学到,其它的都是体力活.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值