dポイントプレゼントキャンペーン実施中!

CListBoxを派生させて
オーナードローをしたのですが、(違うような気がするのですが)
AddStringしても項目が追加できず
選択できるセルがありません。
ただ、描画がされているだけのようです。
また、AddStringの文字はどうやって表示するのでしょうか?
最終的には、以下のようなことがしたいと思っています。
左にアイコンがあり、ディレクトリごとに
段があるリストボックスです。
もうひとつ、
セルを透過させて背景にBitmapの表示。
こちらのほうで、オーナー描画が必要かなと思い
今に至ります。
ただ、オーナー描画のこととかよくわかっていません。
よろしくお願いします。
------------------------------------------------
void CzListDlg::OnBnClickedButton1()
{
static int Cnt=6587;
char Str[128];
itoa(Cnt,Str,10);
List.AddString(Str);
Cnt++;
}
BOOL CzListDlg::OnInitDialog()
{

***
List.Create(LBS_OWNERDRAWFIXED|LBS_HASSTRINGS|WS_VISIBLE,CRect(0,0,120,200),this,5000);
***
}
------------------------------------------------
void mList::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC *pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
pDC->TextOut(0,0,"Hello World");//←本当は、AddStringした文字がほしい
pDC->TextOut(0,0,(char *)lpDrawItemStruct->itemData);
}

void mList::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
lpMeasureItemStruct->itemHeight=30;
lpMeasureItemStruct->itemWidth=120;
// TODO : ここにメッセージ ハンドラ コードを追加します。
}

A 回答 (1件)

MSDNライブラリに載っている例はご覧になりましたか?


http://www.microsoft.com/japan/msdn/library/defa …
描画の仕方は何となくこれでイメージがつかめると思います。

どういうものを描画したいのか、
文章だけでは読み取るのが難しいですが、
多分オーナードローでいいと思います。

おそらく誤解されている点に限って申しますと、
選択に関しては、選択されている部位の色が変わったりとか、
フォーカスの枠線が表示されたりという部分も、
オーナードローの場合、自分でコーディングすることになります。
ですので、リストボックスのアイテム上でクリックなどをしても、
描画していない以上は、画面上ではわかりません。

描画するべきアイテムがあるときにDrawItemが呼ばれるわけですが、
DRAWITEMSTRUCT構造体のメンバであるitemActionやitemStateの値で条件分岐し、
描画するべきアイテムがどういう状態にあるかによって、
塗りつぶす色などを場合分けしなくてはなりません。
この辺は、MSDNの例を見るなり、
実際にこのコードをコンパイルして動きを見れば意味がわかると思います。

また、描画する範囲ですが、
DRAWITEMSTRUCT構造体のメンバであるRECT構造体rcItemに入っています。
この座標を文字や背景、選択の枠などを描画する位置を決めるのに使います。

AddStringで追加した文字列を参照するには、
lpDrawItemStruct->itemDataで合っています。

私も特に詳しいわけではないので、こんな説明しかできません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/08/21 14:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています