• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ClistBoxでオーナードローがよくわかりません。)

ClistBoxでオーナードローについての質問

このQ&Aのポイント
  • CListBoxを派生させたオーナードローに関する質問です。
  • AddStringしても項目が追加できずに選択できるセルがない状態になっています。
  • オーナードローの基本的な使い方やAddStringでの文字の表示方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

MSDNライブラリに載っている例はご覧になりましたか? http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_clistbox.3a3a.drawitem.asp 描画の仕方は何となくこれでイメージがつかめると思います。 どういうものを描画したいのか、 文章だけでは読み取るのが難しいですが、 多分オーナードローでいいと思います。 おそらく誤解されている点に限って申しますと、 選択に関しては、選択されている部位の色が変わったりとか、 フォーカスの枠線が表示されたりという部分も、 オーナードローの場合、自分でコーディングすることになります。 ですので、リストボックスのアイテム上でクリックなどをしても、 描画していない以上は、画面上ではわかりません。 描画するべきアイテムがあるときにDrawItemが呼ばれるわけですが、 DRAWITEMSTRUCT構造体のメンバであるitemActionやitemStateの値で条件分岐し、 描画するべきアイテムがどういう状態にあるかによって、 塗りつぶす色などを場合分けしなくてはなりません。 この辺は、MSDNの例を見るなり、 実際にこのコードをコンパイルして動きを見れば意味がわかると思います。 また、描画する範囲ですが、 DRAWITEMSTRUCT構造体のメンバであるRECT構造体rcItemに入っています。 この座標を文字や背景、選択の枠などを描画する位置を決めるのに使います。 AddStringで追加した文字列を参照するには、 lpDrawItemStruct->itemDataで合っています。 私も特に詳しいわけではないので、こんな説明しかできません。

thulala
質問者

お礼

回答ありがとうございました。 回答を参考にして 理解を深めることが出来ました。 感謝しています。 難しいですね。 慣れるしかないのでしょうけど。 OnDrawItem DrawItem と複数の関数があったりして、 最初は、???状態です。

関連するQ&A