CListCtrlEx:一个支持文件拖放和实时监视的列表控件——用未公开API函数实现Shell实时监视

一、需求
无论何时,当你在Explorer窗口中创建、删除或重命名一个文件夹/文件,或者插入拔除移动存储器时,Windows总是能非常快速地更新它所有的视图。有时候我们的程序中也需要这样的功能,以便当用户在Shell中作出创建、删除、重命名或其他动作时,我们的应用程序也能快速地随之更新。
二、原理
Windows内部有两个未公开的函数(注:在最新的MSDN中,已经公开了这两个函数),分别叫做SHChangeNotifyRegister和SHChangeNotifyDeregister,可以实现以上的功能。这两个函数位于Shell32.dll中,是用序号方式导出的。这就是为什么我们用VC自带的Depends工具察看Shell32.dll时,找不到这两个函数的原因。SHChangeNotifyRegister的导出序号是2;而SHChangeNotifyDeregister的导出序号是4。
SHChangeNotifyRegister可以把指定的窗口添加到系统的消息监视链中,这样窗口就能接收到来自文件系统或者Shell的通知了。而对应的另一个函数,SHChangeNotifyDeregister,则用来取消监视钩挂。SHChangeNotifyRegister的原型和相关参数如下:
ULONG SHChangeNotifyRegister
(         
HWND  hwnd,
    int   fSources,
    LONG  fEvents,
    UINT    wMsg,
    Int  cEntries,
    SHChangeNotifyEntry *pfsne
);
其中:
hwnd
将要接收改变或通知消息的窗口的句柄。
fSource
指示接收消息的事件类型,将是下列值的一个或多个(注:这些标志没有被包括在任何头文件中,使用者须在自己的程序中加以定义或者直接使用其对应的数值)
SHCNRF_InterruptLevel
0x0001。接收来自文件系统的中断级别通知消息。
SHCNRF_ShellLevel
0x0002。接收来自Shell的Shell级别通知消息。
SHCNRF_RecursiveInterrupt
0x1000。接收目录下所有子目录的中断事件。此标志必须和SHCNRF_InterruptLevel 标志合在一起使用。当使用该标志时,必须同时设置对应的SHChangeNotifyEntry结构体中的fRecursive成员为TRUE(此结构体由函数的最后一个参

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: clistctrlex demo是一个在Visual C++环境下的控件展示演示。这个demo主要展示的是clistctrlex这个控件使用方法和效果展示。clistctrlex控件一个集合控件,能够方便地管理和展示一组数据。 在这个demo中,我们可以看到一个包含了clistctrlex控件、按钮控件和编辑框控件的窗口。在这个窗口中,我们可以通过clistctrlex控件来展示一组数据,通过按钮和编辑框来操作这组数据。 在clistctrlex控件使用方面,这个demo展示了clistctrlex的几种不同的风格模式,包括图标、列表、报表和细节风格。同时,这个demo也展示了clistctrlex控件的排序、筛选和分组功能,以及如何将数据与列表视图中的图像对应起来。 除了clistctrlex控件使用,这个demo还展示了如何将控件与其他控件进行交互。通过按钮控件,我们可以添加、删除或编辑clistctrlex控件中的数据。通过编辑框控件,我们可以对clistctrlex控件中的数据进行查询。 总之,clistctrlex demo是一个简单而实用的控件展示演示,它展示了clistctrlex控件的一些基本功能和使用技巧,同时也展示了如何将多种控件组合使用实现更加复杂的交互效果。 ### 回答2: CListCtrlEx Demo是一个基于CListCtrlEx的演示程序。CListCtrlEx是MFC库中的一个控件,提供了列表控件功能,并附加了一些额外的功能,比如列标题自动排序、单元格编辑、拖放排序等等。 该演示程序主要展示了如何使用CListCtrlEx来创建和操纵一个可定制的列表控件。在程序中,我们可以看到一个带有多列数据的列表,并且每一列数据都可以进行排序和编辑。此外,我们还可以使用鼠标进行单元格拖放操作,以快速重新排序列表数据。 通过该演示程序,我们可以深入了解CListCtrlEx使用方法和功能,从而将其应用于我们自己的项目中。无论是开发桌面应用程序还是网站,列表控件都是必不可少的UI组件之一。因此,了解和掌握列表控件使用方法和技巧,对于开发高质量的软件应用程序具有非常重要的意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值