也许大家看到这个题目,未曾进行windows shell编程的同学呢,会不明白是什么意思,这里简单的介绍一下,windows shell就是可以使编写的程序与系统关联(如快捷方式,托盘图标等),管理系统资源(如文件,文件夹等)的编程方式。在说的简单一点,就是通过编程控制windows系统的各种行为以及外观,对windows系统进行各种操作和设置。在windows中的所有资源,主要是文件和文件夹,在windows中是通过shell名字空间来管理,windows系统的每个文件和文件夹都在shell名字空间中有一个唯一的标示符,叫PIDL,通过它可以唯一标示一个系统资源,但是对于我们普通用户来说,是通过全路径在定位一个文件,如c:/hello.mp3.这两者之间可以进行转换。

上面大概对Shell编程的理解,ShellManager主要就是用来获取系统中某个文件夹的路径而使用,在Win32中的使用是比较麻烦的,在mfc中,它的使用就很简单了,主要通过类CShellManager来管理的,首先来看看界面,认识一下ShellManager,如下图:

有的时候,我们需要枚举某个文件件的某种类型的文件,例如,在酷狗播放器中,添加歌曲的时候,有一个选项就是从文件夹添加,选中一个包含了mp3文件的文件夹,然后就可以枚举获取所有这个文件加下的mp3文件,而不用通过打开文件对话框去获取文件的路径。<喎�"/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+TUZDxKzIz8bkyrW+zcztvNPBy7bUU2hlbGxNYW5hZ2VytcTWp7PWo6zOqsqyw7TV4sO0y7XE2KOsztLDx8/IwLS/tNTau/nT2rbUu7C/8rXEbWZjs8zQ8tbQo6zU2mFwcMDgtcRJbml0SW5zdGFuY2W6r8r91tDT0NXi0fnSu77ko7o8L3A+CjxwPjxpbWcgc3JjPQ=="/uploadfile/Collfiles/20140323/20140323091305203.jpg" alt="\">

如果你建立的对话框是继承与CWinapp的,会有这么一句,如果你的对话框是基于CWinAppEx的,那么就不用我们手动创建,而是在继承于CWinAppEx的类的Initinstance中调用InitShellManager(),由框架为我们创建,这种创建方式,只要我们在需要使用到ShellManager的地方,就是用GetShellManager函数就会返回它的指针,就可以进行使用。

下面我们来讲使用,首先我建立了一个对话框,然后添加了一个按钮,名称为ShellManager的按钮,我打算在点击这个按钮的时候,显示一个ShellManager。如下图:

然后再看看按钮的处理,我添加代码要显示一个ShellManager对话框获取某个文件夹的路径,并用消息框显示出来,代码如下:

现在运行,效果如下图:

这样就可以获取指定的文件夹了,另外,我们还可以在设置root(根)节点的位置,这样,就一开始会显示该目录一下的文件夹。比如,我在这里设置G:\Kugou。代码修改如下:

然后再次运行,效果如下:

另外还有许多标记可以设置,来控制它的特征行为。

上面我使用的是继承与CWinAppEx的app类的初始化ShellManager的方式来使用的,如果我使用继承与CWinApp类的初始化方式,我就要自己实例化CShellManager对象。然后将对象指针作为app类的成员,然后在我们之后就可以调用,如声明一个成员用来保存CShellManager对象:

然后在Initinstance中进行初始化:

在程序结束的时候,要删除对象:

在程序使用:

这样的效果和前面的就是一样,不同的是如果我们使用前面那种方法,就是继承与CWinAppEx的方式,我们就只管用,程序结束时,也不用我们销毁对象,如果使用CWinAppEx,就不要在Initinstance中用new的方式自己创建对象,否则会出现程序崩溃的错误。

下面,我就是用上面获取的文件夹路径写一个枚举指定文件夹中文件的程序,首先利用CShellManager的方法ItemFromPath将获取的路径转换为PIDL。然后再枚举其中所选择的文件夹中的文件。如下图:

选取一个文件夹,这里我选择G:\mp3文件夹,点击确定:

然后选择"枚举item",就可以枚举这个文件夹下的存在的文件:

关于 CShellManager 的作用的更多相关文章

  1. if __name__== "__main__" 的意思(作用)python代码复用

    if __name__== "__main__" 的意思(作用)python代码复用 转自:大步's Blog  http://www.dabu.info/if-__-name__ ...

  2. (转载)linux下各个文件夹的作用

    linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...

  3. github中的watch、star、fork的作用

    [转自:http://www.jianshu.com/p/6c366b53ea41] 在每个 github 项目的右上角,都有三个按钮,分别是 watch.star.fork,但是有些刚开始使用 gi ...

  4. web.xml中welcome-file-list的作用

    今天尝试使用struts2+ urlrewrite+sitemesh部署项目,结果发现welcome-file-list中定义的欢迎页不起作用: <welcome-file-list> & ...

  5. web.xml中load-on-startup的作用

    如下一段配置,熟悉DWR的再熟悉不过了:<servlet>   <servlet-name>dwr-invoker</servlet-name>   <ser ...

  6. SQLSERVER中NULL位图的作用

    SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站:www.sqlskills.com,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Da ...

  7. 电容与EMC-电容不同功能时对整板EMC的作用

    一般我们的pcb板的器件有很多种类,但是值得特别关注的,很多人都会说是BGA.接口.IC.晶振之类,因为这些都是layout功能模块以及设计难点.然而数量上占绝对优势的器件却是阻容器件,之前围殴阻抗时 ...

  8. FTP的搭建与虚拟目录作用<之简单讲解>

    操作系统:win7 VS2010编写WebService与在IIS的发布<之简单讲解>中我已经说了IIS安装与使用,不明白的可以跳过去看. 1.添加FTP站点 2. 3. 4. 5. zq ...

  9. 火狐浏览器中event不起作用解决办法--记录(一)

    今天遇到了这个问题.IE,谷歌下都没问题,但在FF下却不起作用,很郁闷查了半天,看别人博文写了老长,结果试了要么起作用,但太麻烦,要么不起作用,说了那么多跟没说一样. 其实只要这一句代码就行:e=ar ...

随机推荐

  1. python字符串比较大小

    zfill函数 xs = ['] print (sorted(xs))

  2. phhstrom 快捷键

    TODO(表示待办事件)注释 快捷键 Alt+6 Alt+6 可以查看添加了//TODO注释的代码片段 一般我们在开发过程中由于时间或者各方面的时间来不及完成的代码,往往会先将逻辑写出来,实现留待以后 ...

  3. python学习笔记:循环语句——while、for

    python中有两种循环,while和for,两种循环的区别是,while循环之前,先判断一次,如果满足条件的话,再循环,for循环的时候必须有一个可迭代的对象,才能循环,比如说得有一个数组.循环里面 ...

  4. java 重新学习 (一)

    一 垃圾回收特点 1.垃圾回收的工作目标是回收物对象的内存空间,这些内存空间都是jvm堆内存里的空间,垃圾回收器值回收内存资源,对他的物理资源:数据库连接,磁盘I/O等资源则无能为力 2.更快进行垃圾 ...

  5. span 设置inline-block 写文字的span错位

    写一个如下图这样排版 设置几个span为inline-block  中间的span写了文字的span错位了 解决方案 给span添加 vertical-align: top

  6. yum安装LAMP

    安装LAMP环境二进制包安装,先更新yum源,PHP 7.0.33 扩展可选 yum -y install mysql mysql-server mysql-devel httpd httpd-dev ...

  7. 洛谷 P4178 Tree

    #include<iostream> #include<cstdlib> #include<cstdio> #include<cmath> #inclu ...

  8. Clairewd's message /// 字符串hash

    题目大意: 给定字符串s 是26个字母对应的密文字母 给定字符串c1 是 密文+部分原文 原文可能缺损 要求将原文补全输出 利用s得到密文字母对应的原字母rs 利用rs翻译c1得到 原文+部分密文c2 ...

  9. vue对象侦测

    http://blog.csdn.net/yihanzhi/article/details/74200618 数组:this.$set(this.arr,index,value)

  10. phpstorm提示phalcon语法

    先安装phalcon,将phalcon的扩展php_phalcon.dll添加到PHP的ext目录下,这个不做赘述,网上教程很多 下面直接安装phalcon-devtools, 1,分别下载phalc ...