程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> MFC中ShellManager的使用

MFC中ShellManager的使用

編輯:C++入門知識

也許大家看到這個題目,未曾進行windows shell編程的同學呢,會不明白是什麼意思,這裡簡單的介紹一下,windows shell就是可以使編寫的程序與系統關聯(如快捷方式,托盤圖標等),管理系統資源(如文件,文件夾等)的編程方式。在說的簡單一點,就是通過編程控制windows系統的各種行為以及外觀,對windows系統進行各種操作和設置。在windows中的所有資源,主要是文件和文件夾,在windows中是通過shell名字空間來管理,windows系統的每個文件和文件夾都在shell名字空間中有一個唯一的標示符,叫PIDL,通過它可以唯一標示一個系統資源,但是對於我們普通用戶來說,是通過全路徑在定位一個文件,如c:/hello.mp3.這兩者之間可以進行轉換。


上面大概對Shell編程的理解,ShellManager主要就是用來獲取系統中某個文件夾的路徑而使用,在Win32中的使用是比較麻煩的,在mfc中,它的使用就很簡單了,主要通過類CShellManager來管理的,首先來看看界面,認識一下ShellManager,如下圖:

\

有的時候,我們需要枚舉某個文件件的某種類型的文件,例如,在酷狗播放器中,添加歌曲的時候,有一個選項就是從文件夾添加,選中一個包含了mp3文件的文件夾,然後就可以枚舉獲取所有這個文件加下的mp3文件,而不用通過打開文件對話框去獲取文件的路徑。<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+TUZDxKzIz8bkyrW+zcztvNPBy7bUU2hlbGxNYW5hZ2VytcTWp7PWo6zOqsqyw7TV4sO0y7XE2KOsztLDx8/IwLS/tNTau/nT2rbUu7C/8rXEbWZjs8zQ8tbQo6zU2mFwcMDgtcRJbml0SW5zdGFuY2W6r8r91tDT0NXi0fnSu77ko7o8L3A+CjxwPjxpbWcgc3JjPQ=="http://www.2cto.com/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",就可以枚舉這個文件夾下的存在的文件:


好了,今天就說這麼多了!!

有關本文的代碼:http://download.csdn.net/detail/xinzhiyounizhiyouni/7082807

http://www.panshy.com/article/Sort_Desktop/SystemDev/2012-03-21/278.php

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved