あなたが探している情報は、この日記には記されていない可能性が高いです。(検索で来た人用)
にらどんは一杯500円。尚、出前は承っておりません。ご了承下さい。

LVS_OWNERDATAを設定して、仮想リストビュー化というものをしてみた。と思う。
相変わらず何をどうしてもWM_DRAWITEMを拾うことはできない。
他の方法を探す中で項目が1000を超える場合は仮想化が必要であることを知った。
これでアイテムの描画をこちらに一任してくれるらしい。
ここでドロー関数はさんじゃえばいいんじゃねってことで突っ込んでみると
case LVN_GETDISPINFO:でようやく反応アリ!


よっしこれで完璧だろと思ったらListViewGetItemRect(),ListViewGetItemTextがそれぞれ失敗している。
LPDRAWITEMSTRUCTのメンバhwndItemが評価不能になっているのが原因なのだろうか。
と考えてリストビューのハンドルを別引数として渡してみたが変わらず。
なんでかと思ったらWM_DRAWITEMで拾ってるわけじゃないからlParamをキャストしても意味無いのか。
じゃあ自分で構造体に数値入れてって使えばいいんじゃね、
と思ったらitemIDで積んだ。要するにこれはインデックスのことだと思われる。
どのアイテムを描画するかなんてコーディング段階では特定できない。
WM_DRAWITEMを拾わないことにはオーナードローは不可能、か・・・


お、お、おお!
仮想化できた!表示はやい!
でも結局オーナードローができない。
インデックスは取得できるけどitemActionとitemStateが取得できないからおわっとる。
あ、アクションは使わないしStateやRectは取得できるっぽい?
いけた、いけたぞ!描いたッ!第3部完!
ようやく前進した。結局DRAWITEMを拾うことはできなかったけど、問題は全てクリアされた。多分。
アイコンが消えてて切れたテキストが...になってるから、それをどうにかして直していこう。
あと制限カードは色付きな。これ大事。これがやりたいがためにオーナードローなんぞしてるんだ。
仮想化も実は仮置きで、これとは別個でもう一個配列作らなきゃだけどコケる要素はないし大丈夫だろう。(フラグ


オーナードローの記述は思ったほど面倒でもないんだけど、
WM_DRAWITEMが拾えない以上、これみたいに別ルートから動き拾えないと
他のコントロールじゃ出来ないんだよね。それとも他なら普通に投げてくれるんだろうか。