1

可変高の所有者が ListBox コントロールを描画します。AddString を呼び出すと、MeasureItem メッセージが送信され、Windows に項目のサイズを伝えるように求められます。問題は、コードがまだ SetItemData を呼び出す機会がないため、コードがまだサイズを決定できないことです。

SetRedraw(FALSE) を呼び出して、測定要求が延期されることを期待してみましたが、うまくいきませんでした。

では、CListBox に項目を追加し、同時に渡された項目データを取得するにはどうすればよいでしょうか? LBS_HASTRINGS の有無にかかわらず試してみました。他に何を試すべきかわからない。

4

1 に答える 1

1

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

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

利点は、文字列と項目データの両方MeasureItem()が呼び出されるまでに利用可能になることです。欠点はCompareItem()、リストが並べ替えられている場合に実装する必要があり、項目が削除されたときとリスト ボックス コントロールが破棄される前の両方でラッパーを解放する必要があることです。

于 2012-01-17T16:25:27.640 に答える