環境:VisualStudio2008 MFC
CListCtrlでカラム分けて複数行あるリストの場合、
部分的に色を変更して斜体にするにはどうすれば良いのでしょうか?
リストで以下のようにある場合、Dの部分だけ変更したいのです
A B
C D
E F
全体はSetfontで出来るようですが、部分的には可能なのでしょうか?
可能です。
CListCtrl カスタムドローで検索してみましょう。
「オーナードロー」ですね。設定するフラグもそのような
名前になっています。
CListCtrlにLVS_OWNERDRAWFIXEDをスタイルに設定すると、
オーバーライドした描画関数
virtual void DrawItem( LPDRAWITEMSTRUCT lpDIS)
が、必要なときにコールされます。
lpDIS->itemID が、描画すべきリストの行番号です。
このフラグを設定すると、コントロール側は各行の描画については
ほとんど何もしてくれません。全て自前で描画しなければ
なりません。もちろんフォントも自由にしてかまいません。
簡単なのでまずやってみましょう。
調べてみると解りますが、
オーナードロウは、仲澤@失業者さんが書かれているように
自分がやりたい部分だけを記述すれば済むと言う物では有りません。
基本的に画面描画の全てを自分で記述する必要があります。
この為、コード量が非常に多くなりますし、
CListCtrlの動作を逐一把握していないときちんとした形にできません。
カスタムドロウは、オーナードロウの問題点を解決する為に用意されている方法で
基本的な部分は既存の動作をさせつつ、変えたい部分だけを記述する事で動作を
変える事が出来ます。但し、カスタムドロウはオーナードロウでは出来る事が
出来なかったりしますので自分がやりたい事がカスタムドロウで実現出来るなら
カスタムドロウで実装し、無理ならオーナードロウと言う流れになると思います。
詳しいやり方に関してはWeb上を検索して調べてみてください。
カスタムドローで実装できました!
参考にしたのは、このサイトの過去ログでした
http://rarara.cafe.coocan.jp/cgi-bin/lng/vc/vclng.cgi?print+200810/08100001.txt
お三方、アドバイスありがとうございました!