ドライブアイコンを取得してリストコントロールに表示する
2010年 01月 12日
// 次の2行は、通常ヘッダファイルに含めます。
CImageList m_imageList; // イメージリスト
CListCtrl m_listCtrl; // リストコントロール
// イメージリストを作成し、リストコントロールにセットする
CImageList* pImageList;
pImageList = new CImageList();
pImageList->Create(32, 32, ILC_COLOR32 | ILC_MASK, 10, 10);
m_aNswerList.SetImageList(pImageList, LVSIL_SMALL);
// ドライブアイコン(フォルダでも可:ファイルの場合は、フラグを変更の事)
// を表示したいパスを指定
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 — レポートビュー