vista sp1
vc2008 Express Edition
リストビュー(レポート)をカスタムドローで表示しています。
LVS_EX_FULLROWSELECTで一行選択にしているんですが、アイコンの背景色だけが変化しま
せん。
どうすればいいのでしょうか?
ちなみにアイコンは次のように読み込んでいます。
SHGetFileInfo(szIconPath, 0, &info, sizeof(info), SHGFI_ICON | SHGFI_SMALLICON);
SetListIconからのイメージリストをリストビューに登録してる?
> アイコンの背景色だけが変化しません。
…表示は出来ているって事か、失礼。。
.ico ファイルから読み込むのに SHGetFileInfo を使ってるんですか?
LoadImage とかでいいような気がする。
Express ってことは MFC は使ってないんですね。
あとは、アイコンにちゃんとマスクが入っているか、ImageList_Create に ILC_MASK を
渡しているか、とかでしょうか。
aetosさん、回答ありがとうございます。
>.ico ファイルから読み込むのに SHGetFileInfo を使ってるんですか?
>LoadImage とかでいいような気がする。
32×32のアイコンを16×16にしたくてそうしています。
>あとは、アイコンにちゃんとマスクが入っているか、
アイコンにマスクが入っているというのは、どういう意味でしょうか?
>ImageList_Create に ILC_MASK を
>渡しているか、とかでしょうか。
ImageList_Create(16, 16, ILC_COLORDDB | ILC_MASK, 1, 1);
ImageList_Create()は多分大丈夫だと思います。
イメージリストなんかやめて::DrawIcon()で自前で描画してみる
ってのも、一つの手ですtが、
1.ImageList_AddIcon()を使ってますか。
2.ILC_COLOR24にしてみたらどうなりますか。
なんてのが気にかかるところです。
聞きたいのは、アイコンの背景が透けないっていうことかな?
だとしたら、1つだけ確認したいのですが、
その問題のアイコンをデスクトップにコピーしてみてください。
デスクトップの背景は透けていますか?
>イメージリストなんかやめて::DrawIcon()で自前で描画してみる
オーナードーローってことですか?
>1.ImageList_AddIcon()を使ってますか。
SHGetFileInfo(szIconPath, 0, &info, sizeof(info), SHGFI_ICON | SHGFI_SMALLICON);
ImageList_AddIcon(hSmall, info.hIcon);
はい、使っています。
>2.ILC_COLOR24にしてみたらどうなりますか。
ImageList_Create(16, 16, ILC_COLOR24 | ILC_MASK, 1, 1);
としましたが、結果は同じでした。
>デスクトップの背景は透けていますか?
全てのアイコンをデスクトップにコピーして試しましたが、
全てのアイコンが透けていました。
今気づいたのですが、仮想リストビューなのでそこの部分がおかしいのかなとも思いました。
if(pLvDispInfo->item.mask & LVIF_IMAGE)
{
pLvDispInfo->item.iImage = nImageNumber;
pLvDispInfo->item.stateMask = 0;
pLvDispInfo->item.state = 0;
}
> 全てのアイコンをデスクトップにコピーして試しましたが、
> 全てのアイコンが透けていました。
ということはアイコン側の問題ではないですね。
その先の話は、現在、検証中...
>アイコンの背景色だけが変化しません。
↑これはアイテムが選択状態にあるときです。orz
・アイコンファイルの背景色を、「画面の色(透過)」から、「反転色」に塗りなおし
・CImageListのILC_MASKをはずす。
やっと再現できました。
と思ったら、すでに解決方法が出てますね。
ryoさんの方法でうまくいきました。
>アイコンファイルの背景色を、「画面の色(透過)」から、「反転色」に塗りなおし
ryoさん、bunさん、ありがとうございます。
アイコンファイルの背景色を反転色にするにはどうするのでしょうか?