またまたMFCです。こんなの作ってみた。でもどのみちスムーススクロールしないので、いやスムーススクロールへの道はないことがわかったので、敗北感たっぷりなのだが。以下はリストビューのオーナードローのメモ。流れとしては
- 基本クラスを継承し、
- DrawItemハンドラを追加し
- DrawItemの中身を記述する
というわけなのだが、これの具体的なやり方がどうもすっきりわかりにくいのでメモ。(VC2008SP1)
- LVS_OWNERDRAWFIXEDをスタイルに加えるというか、リソースエディタがあるなら、OwnerDrawFixed を、Trueにする。勿論、リストビューはレポートモードにしてある。
- ダイアログに貼り付けたリストビューをダイアログのm_list2という名のメンバにした。
- クラスビューの右クリックメニューから、「クラスの追加」で、CListCtrlから派生させたCMylistCtrl を作成。
- CMyDialog.h の中で宣言されている、 CListCtrl m_list2 という宣言を、CMylistCtrl m_list2に書き換えた。もちろん#include "MylistCtrl.h"もしてだ。
- クラスビューのCMylistCtrlを右クリック、プロパティで、DrawItemメソッドを追加した。(プロパティウィンドウの雷のアイコンではなく、その右にある四角みたいなアイコンから)(ダイアログの、WM_DRAWITEMのハンドラとして作成するわけではなし。あくまで、CMylistCtrlクラスの、DrawItem( LPDRAWITEMSTRUCT )という関数が作成されなくてはならない。
- CMylistCtrl::DrawItem() 関数ができるので、その中で、ブレークポイントをかけると、ちゃんと処理がそこに飛んできていることが確認できた。
- CMylistCtrl::DrawItem( LPDRAWITEMSTRUCT /*lpDrawItemStruct*/ )を、CMylistCtrl::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ) に書き直して、
- これで漸く、DrawItemコーディングの世界に飛び込むことができるようになる。
それはまた気が向いたときに。
// DrawItemの実装例