- ベストアンサー
カスタムドローについての質問
- リストビューのカスタムドローについての質問です。一列目の項目が赤や青になる処理を行いたいが、他の列にも適用する方法がわかりません。
- WM_NOTIFYにカスタムドロー処理を記述したが、一列目の項目しか色が変化しない。行全体の値を書き換える処理を追加したが、表示が点滅する問題が発生。
- 一列目にカスタムドローの通知が来たら他の列にもカスタムドロー通知する方法を探したが見つからず、解決策を知りたい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
イベント処理をどのように行っているか分からないので分からないですが、 switch(lplvcd->nmcd.dwDrawStage){ case CDDS_PREPAINT: *pResult = CDRF_NOTIFYSUBITEMDRAW; // サブアイテムも通知する break; case CDDS_ITEMPREPAINT|CDDS_SUBITEM://サブアイテムの処理 { //色を変える処理 } こんな感じでイベント処理すればできませんかね? あと、1列目の値を書き換える際に InvalidateRect を呼ぶようにすれば、全体を再描画してくれると思います。
その他の回答 (1)
- Kyo99
- ベストアンサー率12% (1/8)
参考URLからの引用で恐縮なのですが 『"項目の描画前通知" をプログラムに送るようにするためには、"描画前" 通知を受け取ったときに、ウィンドウプロシージャで CDRF_NOTIFYITEMDRAW という値を返してやればよい。そうすると、項目毎の描画前通知を受け取ることができるようになります。』 とのことです。 サンプルも載ってるようなので参考にしてみてはいかがでしょうか。
補足
ありがとうございます。 CDRF_NOTIFYITEMDRAWですが、これを返してもアイテム毎の通知を受け取ることができるようになるだけで、実際に通知が来るのはそのアイテムの内容が更新された時など特定の動作をした時のようなので、こちらの思い通りのタイミングで通知を受け取ることはできないみたいです。 今考えているのは、行全体の値を書き換える処理をWM_NOTIFYに書くのではなく、一列目の内容を更新する処理の中に入れると、良いタイミングでカスタムドローできるかもしれません。 ですがこの方法は多少無理やりな気がします。 もう少し待ってみて、何か無いようならこの方法で行こうと思います。
お礼
カスタムドローの記述は同じように書いていましたが、 InvalidateRectがありませんでした。 これでできそうです。ありがとうございました。