リストコントロールの選択行の色の変更

[戻る]
大三元 2006/06/21(水) 11:07:29
VC++6.0 WindowsXPです。

リストコントロール(レポート)の
現在選択されている行全体の背景色を変更したいのですが・・・
デフォルトではグレイになってるようです。
誰かわかる方いませんか?

三草 2006/06/21(水) 11:16:19
三草です。

カスタムドローもしくは、オーナードローを使うことになるかと思います。

以下、ご参考までに。。。

リストビューコントロールの背景色を変えたい
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200508/05080001.txt

リストコントロールの文字色を変える
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200209/02090029.txt

大三元 2006/06/21(水) 11:20:58
>カスタムドローもしくは、オーナードローを使うことになるかと思います。
カスタムドローで作成してます。

アイテムごとの背景色の設定はできているのですが、
選択行の背景色の設定ができないのです。

Blue 2006/06/21(水) 11:29:55
NMCUSTOMDRAW構造体のuItemStateで状態を判定できませんでしょうか?
参考
http://www.kumei.ne.jp/c_lang/sdk3/sdk_261.htm

大三元 2006/06/21(水) 13:33:57
>NMCUSTOMDRAW構造体のuItemStateで状態を判定できませんでしょうか?
う〜ん。いまいちわかりません。

Ban 2006/06/21(水) 14:04:31
> う〜ん。いまいちわかりません。
では、どこまで調べて、どこまで試して、どこまでならわかるのでしょうか。
「大三元 さんの"いまいち"」は大三元 さん以外の人にはいまいちわかりません。

PATIO 2006/06/21(水) 14:18:49
とりあえず、デバッグで止めてどんな時にどんなuItemStateが返ってきているかとか
調べて見てはどうですか?
ステータスの内容はヘッダーファイルを検索すればどのファイルに定義されているか
わかるでしょうし、それと実際の状況を照らし合わせてみると何かわかるかもしれませんよ。
Banさんも書かれていますけれど、大三元さんが何処をどう調べてどう考えたのかが
全くかかれていないので読んでいても状況が全く伝わってきません。
掲示板では書かれている内容が全てなので書かれていなければ、大三元さんがどれだけ
調べていても何もしていないと思われてしまいます。
状況を伝える努力をお願いします。
(えてしてこの努力のお陰で自己解決する場合もありますが)

あと参考になりそうなページがあったので一応リンクしておきます。
http://forums.belution.com/ja/vc/000/358/36s.shtml

兎にも角にも大三元さんがきちんと理解して先に進まないと意味が無いので
理解できるまで頑張ってください。

大三元 2006/06/22(木) 09:05:13
[[解決]]
できました〜(^_^)
PATIOさんの参考ページを元に、
以下の関数内にif文を追加したらできました。

void CxxxDlg::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
    LPNMLVCUSTOMDRAW lcd=(LPNMLVCUSTOMDRAW)pNMHDR;

    switch( lcd->nmcd.dwDrawStage ){
    case CDDS_PREPAINT :
        *pResult = CDRF_NOTIFYITEMDRAW;
        break;

    case CDDS_ITEMPREPAINT:
        lcd->clrTextBk = lcd->nmcd.lItemlParam;
        *pResult = CDRF_NEWFONT;
        break;

    default:
        *pResult = CDRF_DODEFAULT;
    }

    // 選択行の背景色を変更
    if (lcd->nmcd.uItemState & CDIS_SELECTED) {
        lcd->clrTextBk = RGB(0, 0, 255);
        lcd->nmcd.uItemState &= ~CDIS_SELECTED;
    }
}

古いスレッドには追加発言できません。