首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC 實作資料夾縮圖顯示:虛擬清單與自繪技術

     編輯:VC 教學

專案簡介

示範 List View 控制項的虛擬清單 (LVS_OWNERDATA) 與自繪功能,結合 Shell 介面 (IShellFolder, IExtractImage) 實現資料夾縮圖顯示,類似 Windows 檔案總管。

關鍵技術點

  1. 虛擬清單建立:PreCreateWindow 設定 LVS_ICON | LVS_OWNERDATA,OnInitialUpdate 設定 SetCallbackMask(LVIS_OVERLAYMASK)。
  2. 快取顯示資訊:處理 LVN_ODCACHEHINT 預先快取可視範圍項目資訊;處理 LVN_GETDISPINFO 依需求提供文字、圖示、狀態。
  3. Shell 介面運用:SHGetDesktopFolder、BindToObject 取得資料夾 IShellFolder,GetUIObjectOf 取得 IExtractImage 擷取縮圖。
  4. 非同步縮圖載入:背景執行緒載入縮圖,完成後 RedrawItems 更新介面。

核心程式碼片段

BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs) {
    cs.style &= ~LVS_TYPEMASK;
    cs.style |= LVS_ICON | LVS_OWNERDATA;
    return CListView::PreCreateWindow(cs);
}

void CMyView::OnInitialUpdate() {
    CListView::OnInitialUpdate();
    GetListCtrl().SetCallbackMask(LVIS_OVERLAYMASK);
}

void CMyView::OnGetdispinfo(NMHDR* pNMHDR, LRESULT* pResult) {
    LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
    if (pDispInfo->item.iItem == -1) return;
    // 從快取或即時取得項目資訊,填入 pDispInfo->item
    *pResult = 0;
}

完整專案碼請下載原文附件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved