ドライブアイコンを取得してリストコントロールに表示する

// 次の2行は、通常ヘッダファイルに含めます。
CImageList m_imageList; // イメージリスト
CListCtrl m_listCtrl; // リストコントロール

// イメージリストを作成し、リストコントロールにセットする

m_imageList.Create(32, 32, ILC_COLOR32|ILC_MASK, 10, 10);
m_listCtrl.SetImageList(&m_imageList, LVSIL_NORMAL); // ※1

// ドライブアイコン(フォルダでも可:ファイルの場合は、フラグを変更の事)
// を表示したいパスを指定

CString strPath = "c:\\";

// アイコンを取得する

HICON hIcon = NULL;
SHFILEINFO sfi;
if(SHGetFileInfo(strPath, FILE_ATTRIBUTE_DIRECTORY, &sfi, sizeof(SHFILEINFO), SHGFI_ICON) != 0)
{
    // sfi.hIcon にアイコンハンドルが戻ってくる
    hIcon = sfi.hIcon;
}

int nImage = -1;
if(hIcon)
{
    // アイコンをイメージリストに追加
    nImage = m_imageList.Add(hIcon);
    
    // 使い終わったアイコンリソースを破棄
    DeleteObject(hIcon);

}

// リストコントロールに登録
nItem = m_listCtrl.InsertItem(++nItem, strPath, nImage);

// 上のちょっと回りくどい処理は、
// アイコンが取得出来なくても、
// イメージリストへの追加が出来なくても、
// とりあえず、リストコントロールにテキストだけでも
// 登録できるようにしています。



※1
CListCtrl::SetImageList() に渡す、引数によって、どのビューで使用されるアイコンか
設定する事が出来る。らしい。

LVSIL_NORMAL --- アイコンビュー
LVSIL_SMALL --- レポートビュー

これ、しっかりドキュメントしてくれ!!!!!!!!
[PR]
by isoq | 2010-01-12 17:06 | C/C++/Win32
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇
<< 日本のブラックバスはフロリダ並み REGZA 42Z9000 買... >>