アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。
Windowsでレポート状態表示のリストコントロールについて質問です。
リストコントロールははオーナーデータで表示しています。

一覧でアイテムの横にアイコン(ビットマップ)を表示しています。
またソートできるようにし、コラム部分には昇順か降順か分かるように▲▼が
表示されるようにしようと思っています。

リストコントロールに表示するアイテム用のイメージリストとヘッダー
コントロール用のイメージリストを用意し、リストコントロールと
リストコントロールから取得したヘッダーコントロールにそれぞれ
追加したのですが、

Header_SetImageList(ヘッダーコントロールのウィンドウハンドル) ;
ListView_SetImageList(リストコントロールのウィンドウハンドル) ;

上記の順番では後から追加したイメージリストで上書きされてしまいました。
Header_GetImageListでイメージリストを取るとListView_SetImageListで
セットしたイメージリストのハンドルが取得されます。

リストコントロールでイメージリストを取り扱う場合はリストアイテムも
ヘッダーも一つのイメージリストで管理しなければならないのでしょうか ?

A 回答 (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);
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/06/14 04:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!