2012-01-17 17 views
1

私は可変高さのオーナー描画ListBoxコントロールを持っています。 AddStringを呼び出すと、アイテムのサイズをWindowsに伝えるように求めるMeasureItemメッセージが送信されます。問題は、コードがまだSetItemDataを呼び出す機会がなかったため、コードがまだサイズを判断できないことです。オーナー描画変数の高さを設定する方法CListBox(MFC)

私はSetRedraw(FALSE)を呼び出して、メジャーリクエストを延期することを望みましたが、運はありませんでした。

CListBoxにアイテムを追加して、アイテムデータを同時に渡すにはどうすればよいですか?私はLBS_HASSTRINGSの有無にかかわらず試しました。他に何を試すかわからない

答えて

1

リストボックスコントロールにLBS_HASSTRINGSスタイルがない場合、AddString()へのポインタ引数は文字列ではなく項目データとして扱われます(LB_ADDSTRINGのドキュメントの「備考」セクションを参照)。

したがって、リストアイテムが文字列とアイテムデータの両方で構成されている場合は、これら2つの情報を構造体またはクラスにラップし、そのラッパーへのポインタをAddString()に渡すことができます。

MeasureItem()が呼び出されるまでに、文字列とアイテムデータの両方が使用可能になるということです。欠点は、リストがソートされている場合はCompareItem()を実装し、アイテムが削除されてリストボックスコントロールが破棄される前にラッパーを解放する必要があることです。

+0

ファンタスティック - 私はどこかにトリックがなければならないことを知っていました:) – DougN

関連する問題