リストビューのデータをCSV形式で保存しようと思っているのですが、ヘッダーコントロールの
テキストを保存することができなくて困っています。
for(int col = 1; col < 10;col++)
{
LVCOLUMN lvclm;
lvclm.mask = LVCF_TEXT;
lvclm.cchTextMax = 100;
ListCtrl.GetColumn(col,&lvclm);//ここで止まってしまう
CString s;
s = (CString)lvclm.pszText;
ar.WriteString(s);
ar.WriteString(,);
}
デバッグしていくと上のところで止まってしまいます。どなたか何かお気づきな点があれば、
なんでもいいので教えてください。よろしくお願いします。
GetColumnする前にlvclm.pszTextに100バイトのバッファのアドレスを与えてやればいいので
は?
ヘルプより抜粋です。参考までに・・・
以下抜粋
取得する情報を指定し、列の情報を受け取るLVCOLUMN 構造体のアドレス。mask メンバはどの
列属性を取得するかを指定します。mask メンバに LVCF_TEXT 値を指定しているときは、アイ
テム テキストを受け取るバッファのアドレスを pszText メンバが持ち、cchTextMax メンバ
にバッファのサイズを指定する必要があります。
NGAさん、TAKAさん、お返事ありがとうございました。下の方法で無事にできるようになりまし
た。
for(int col = 1; col < 10;col++)
{
LVCOLUMN lvclm;
lvclm.mask = LVCF_TEXT;
lvclm.cchTextMax = 100;
CString s;
lvclm.pszText = s.GetBuffer(100);
ListCtrl.GetColumn(col,&lvclm);
ar.WriteString(s);
ar.WriteString(,);
s.ReleaseBuffer();
}
バッファのアドレスを入れるというのはこうやって一度、CStringクラスのオブジェクトを
作らなくてはいけないことだったんですね。てっきり、lvclm.cchTextMax = 100;とする
だけでいいのかと思っていたのですが、そんなわけないですよね。まだまだ勉強不足だと
痛感しました。
バッファの意味がわからなくて、ずっと困っていたので助かりました。本当に
ありがとうございました。