Shell Programming Tips

來源:互聯網
上載者:User

這篇筆記基於對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控制項,如果不看別人的代碼還真不知道從哪裡可以學到,其它的都是體力活.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.