CListViewのヘッダーコントロールのテキストを保存したい

[戻る]
はまち 2002/01/22(火) 17:20:52
リストビューのデータを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(",");
}

デバッグしていくと上のところで止まってしまいます。どなたか何かお気づきな点があれば、
なんでもいいので教えてください。よろしくお願いします。

NGA 2002/01/22(火) 17:30:46
GetColumnする前にlvclm.pszTextに100バイトのバッファのアドレスを与えてやればいいので
は?

TAKA 2002/01/22(火) 17:36:31
ヘルプより抜粋です。参考までに・・・


以下抜粋

取得する情報を指定し、列の情報を受け取るLVCOLUMN 構造体のアドレス。mask メンバはどの
列属性を取得するかを指定します。mask メンバに LVCF_TEXT 値を指定しているときは、アイ
テム テキストを受け取るバッファのアドレスを pszText メンバが持ち、cchTextMax メンバ
にバッファのサイズを指定する必要があります。

はまち 2002/01/22(火) 22:42:26
[[解決]]
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;とする
だけでいいのかと思っていたのですが、そんなわけないですよね。まだまだ勉強不足だと
痛感しました。
 バッファの意味がわからなくて、ずっと困っていたので助かりました。本当に
ありがとうございました。

古いスレッドには追加発言できません。