• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:リストコントロールにセットするイメージリストについて)

Windowsリストコントロールでのイメージリストの管理について

このQ&Aのポイント
  • Windowsのリストコントロールでアイテムの横にアイコンを表示し、ソート機能も追加したいと考えています。
  • リストコントロールに表示するアイテム用のイメージリストとヘッダーコントロール用のイメージリストを用意し、追加しましたが、イメージリストの管理に問題が生じています。
  • イメージリストの追加順によって上書きされてしまい、リストコントロールでイメージリストを管理する上で問題があるようです。一つのイメージリストでアイテムとヘッダーを管理する必要があるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 こんにちは。  試してみましたが、其の通りのようです。  同一のイメージリストを設定して、リストアイテムを追加する際にイメージリストの飛ばしたい位置の分を加算するしかなさそうです。 HIMAGELIST hImgHDR = ImageList_LoadImage(NULL, "header.bmp", 16, 0, CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR | LR_LOADFROMFILE); //HIMAGELIST hImgLST = ImageList_LoadImage(NULL, "list.bmp", 16, 0, CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR | LR_LOADFROMFILE); HWND hList = GetDlgItem(hWnd, IDC_LIST1); HWND hHeader = ListView_GetHeader(hList); Header_SetImageList(hHeader, hImgHDR); ListView_SetImageList(hList, hImgHDR, LVSIL_SMALL); //ListView_SetImageList(hList, hImgLST, LVSIL_SMALL);明らかに影響する //カラム設定 LVCOLUMN col = {0}; col.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT | LVCF_SUBITEM; col.pszText = "test"; col.cx = 100; col.fmt= LVCFMT_LEFT; //ヘッダ設定 HDITEM hi = {HDI_IMAGE | HDI_FORMAT}; hi.fmt = HDF_IMAGE; for(col.iSubItem = 0; col.iSubItem < 2; ++col.iSubItem) { ListView_InsertColumn(hList, col.iSubItem, &col); //ヘッダのイメージリスト位置設定 hi.iImage = col.iSubItem; Header_SetItem(hHeader, col.iSubItem, &hi); } //リストアイテム設定 LVITEM item = {LVIF_TEXT | LVIF_IMAGE}; TCHAR buf[80]; TCHAR text[128]; for(item.iItem = 0; item.iItem < 30; ++item.iItem) { ::wsprintf(buf, "%d", item.iItem); ::_tcscpy(text, TEXT("ITEM")); ::_tcscat(text, buf); item.pszText = text; item.iImage = 2/*イメージリスト位置の飛ばしたい分*/ + ??? ListView_InsertItem(hList, &item); }

shuuden
質問者

お礼

早々のレスありがとうございます。 私も同じ結論になりました。あまくまとめるようにしたいと想います。 ソースコードも参考になります。 ありがとうございました。

関連するQ&A