ClistBoxでオーナードローがよくわかりません。
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 : ここにメッセージ ハンドラ コードを追加します。
}
お礼
解決しました。 ReleaseDC()での解放し忘れではなかったので、 他の解放し忘れかもしれないと思い調べてみたら、 SelectObject()での解放し忘れでした。 テスト用で作っていてコメントアウトしていたつもりなのですが、 うまくコメントアウト出来てなかったようで、 これを消したら正常になりました。 関数化していて、今までうまく行っている様に見えていたので、 見直しはしていませんでした。 ところで、解放し忘れでこういうことが起こるんですね。
補足
回答ありがとうございます。 ReleaseDC()での解放は、全てやっています。 他に何か原因が考えられないでしょうか? ところで、「質問の内容がいま一つ分からないのですが~」と 書かれているのですが、どこが分からなかったのでしょうか? 説明不足だったのでしょうか? そうであれば、追加説明します。