dポイントプレゼントキャンペーン実施中!

リストビューのカスタムドローについての質問です。

一列目の項目が、たとえば
1になるとその行全体を赤に
2になるとその行全体を青に

という処理をするため、WM_NOTIFYにカスタムドローの処理を記述したのですが、一列目の項目しか色が変わりません。

そこでカスタムドローと一緒に行全体の値を書き換える処理を入れてみたのですが、今度は延々とWM_NOTIFY→更新→WM_NOTIFY・・となっていまい、表示がチカチカ点滅してしまいます。

一列目にカスタムドローの通知が来たとき、他の列にカスタムドロー通知をする方法を探してみましたが、見つかりませんでした。

何か良い方法はないでしょうか。

A 回答 (2件)

イベント処理をどのように行っているか分からないので分からないですが、



switch(lplvcd->nmcd.dwDrawStage){
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYSUBITEMDRAW; // サブアイテムも通知する
break;
case CDDS_ITEMPREPAINT|CDDS_SUBITEM://サブアイテムの処理
{
//色を変える処理
}

こんな感じでイベント処理すればできませんかね?
あと、1列目の値を書き換える際に
InvalidateRect
を呼ぶようにすれば、全体を再描画してくれると思います。
    • good
    • 0
この回答へのお礼

カスタムドローの記述は同じように書いていましたが、
InvalidateRectがありませんでした。
これでできそうです。ありがとうございました。

お礼日時:2006/12/20 00:56

参考URLからの引用で恐縮なのですが


『"項目の描画前通知" をプログラムに送るようにするためには、"描画前" 通知を受け取ったときに、ウィンドウプロシージャで CDRF_NOTIFYITEMDRAW という値を返してやればよい。そうすると、項目毎の描画前通知を受け取ることができるようになります。』
とのことです。
サンプルも載ってるようなので参考にしてみてはいかがでしょうか。

参考URL:http://www.geocities.jp/i96815/ui/ui02.html

この回答への補足

ありがとうございます。
CDRF_NOTIFYITEMDRAWですが、これを返してもアイテム毎の通知を受け取ることができるようになるだけで、実際に通知が来るのはそのアイテムの内容が更新された時など特定の動作をした時のようなので、こちらの思い通りのタイミングで通知を受け取ることはできないみたいです。

今考えているのは、行全体の値を書き換える処理をWM_NOTIFYに書くのではなく、一列目の内容を更新する処理の中に入れると、良いタイミングでカスタムドローできるかもしれません。
ですがこの方法は多少無理やりな気がします。

もう少し待ってみて、何か無いようならこの方法で行こうと思います。

補足日時:2006/12/17 00:26
    • good
    • 0

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