Windows mobile下擷取系統表徵圖

來源:互聯網
上載者:User

這個問題其實是由pocket pc的CFileDialog問題引發來的。

 

CFileDialog開啟後,只能選擇My Documents下的目錄和檔案,功能超弱的說(其實應該叫CDocumentFileDialog才對)。

 

好想自己做一個Dialog啊,就跟PC上一樣,可以選擇任務目錄和檔案......

 

枝節不敘,撿點重要的來囉嗦。

 

用到一個CListCtrl控制項,來顯示目錄下的檔案,當然表徵圖最好跟系統的一樣,這樣才美觀。

 

這裡假設m_ListFile就是list控制項,m_ImlSys為CImageList對象,都為對話方塊的成員變數。代碼如下:

HIMAGELIST    hImlSys;
SHFILEINFO    ssfi;

memset(&ssfi,0,sizeof(ssfi));
hImlSys = (HIMAGELIST)SHGetFileInfo(

                                   _T("hello"), 
                                    0,
                                    &ssfi,
                                    sizeof(SHFILEINFO),
                                    SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX | SHGFI_SMALLICON);

m_ImlSys.Attach(hImlSys);
m_ListFile.SetImageList(&m_ImlSys, LVSIL_SMALL);

 

這樣把系統的小表徵圖(SHGFI_SMALLICON)都載入到了m_ImlSys。這些代碼在Dialog的OnInitDialog中實現。"hello"也可以寫成任何值,因為使用了SHGFI_USEFILEATTRIBUTES參數,會忽略第一個參數。還有一個很重要的問題是,在對話方塊退出時,要調用m_ImlSys.Detach()來銷毀資源。不然,很可能退出對話方塊後,連繫統"開始"的的表徵圖都看不到了。

 

CListCtrl的InsertItem可以指定顯示表徵圖的索引(即表徵圖在CImageList中的位置)。那麼,怎麼得到這個索引值呢?

 

還是使用SHGetFileInfo函數,如下:

SHFILEINFO ssfi;
SHGetFileInfo(pszFileName, 0, &ssfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);

ssfi.iIcon就是我們要的值。在這裡,pszFileName請指定檔案的整個路徑(包括尾碼名)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.