掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CListCtrl::SetItemDataでセットした独自クラスのポインタ情報が上書きされないようにするには? (ID:73034)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
環境:Win7 VS2008 VC++ CListCtrl::SetItemData/GetItemDataを使用して、リストがクリックされたときに、 リストに表示されている情報にたどれるように、データのポインタをSet/Getしています。 データはCArrayの配列に独自クラス(CMyData)を用いています。 ソースコードは以下のようになります。 ===。 定義: CArray<CMyData, CMyData&> m_myInfo; CListCtrl m_list; ソース: void SetDataXXX(int index) { CMyData myData; /* myDataに適当なデータをSetする */ m_myInfo.Add(myData); // 原因となるコード m_list.SetItemData( index, (LPARAM)&m_myInfo[index] ); } SetDataXXX(int index)関数は、データが取得される度にCallされる関数で、 m_myInfoにデータをセットし、m_listに対象のデータのポインタをセットするようにしています。 ちなみに、indexは正しく、SetItemDataの直後にGetItemDataしCMyDataのポインタから情報を取得できることを確認しています。 しかし、SetDataXXXが3回ほど呼ばれると、1回目のSetDataXXXでSetItemDataしたポインタ情報が変更されてしまいます。 原因は、CArray::Addの m_myInfo.Add(myData) で、そのなかでCallされているSetAtGrowのようです。 どなたか回避方法をご教授ください。 よろしくお願いいたします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.