オーナー描画リストボックスを用意しまして、そのDrawItem関数内で
AddStringメンバ関数で登録された文字列を取り出そうしたところ、
DrawItem関数の引数のLPDRAWITEMSTRUCT構造体のitemDataメンバが
ヌルとなっていました。登録された文字列を取り出すには、
何が不足しているのかご助言頂けないでしょうか?
よろしくお願いします。
● CListBoxから派生させたオーナー描画リストボックスのDrawItem関数
void CMyListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
LPCTSTR lpszText = (LPCTSTR) lpDrawItemStruct->itemData;
ASSERT(lpszText != NULL); ← ヌルなのでエラーとなっています
:
}
● オーナー描画リストボックスを初期化しているダイアログのOnInitDialog関数
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// m_ListBoxはCMyListBoxのコントロール変数です
m_ListBox.ResetContent ();
m_ListBox.AddString (あああ);
m_ListBox.AddString (いいい);
m_ListBox.AddString (ううう);
m_ListBox.SetCurSel (0);
:
}
● オーナー描画リストボックスのプロパティ
オーナー描画:固定
文字列あり:チェック・オン
● 環境
VC++ 6.0 (MFC)
NT4.0
普通に GetText で取得できたと思うのですが。。。
文字列ありにした場合は、itemData は、SetItemData で設定した値だったと思います
itemDataは、各アイテムに設定できるDWORDデータが設定されると思います。
文字列へのポインタではありませんよ。
リストボックスのスタイルに、LBS_HASSTRINGSを含める必要があったかも知れない…。
たみあさん、sugarさん、レスありがとうございます。
itemData は SetItemData で設定した値だったのですね。
ヘルプで、DRAWITEMSTRUCT 構造体の itemData の説明と
CListBox::DrawItem の例にあるサンプルプログラムを見て
AddString で登録された文字列のポインタが取り出せると
考えてしまいました。ご指摘ありがとうございます。
また、たみあさんが言われた GetText を使用して文字列を
取り出せる事を確認しました。
どうもありがとうございました。