CListViewのヘッダーコントロールのテキストを保存したい – プログラミング – Home

CListViewのヘッダーコントロー...
 
通知
すべてクリア

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


はまち
 はまち
(@はまち)
ゲスト
結合: 24年前
投稿: 146
Topic starter  

リストビューのデータを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
 NGA
(@NGA)
ゲスト
結合: 24年前
投稿: 98
 

GetColumnする前にlvclm.pszTextに100バイトのバッファのアドレスを与えてやればいいので
は?


返信引用
TAKA
 TAKA
(@TAKA)
ゲスト
結合: 24年前
投稿: 117
 

ヘルプより抜粋です。参考までに・・・

以下抜粋

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


返信引用
はまち
 はまち
(@はまち)
ゲスト
結合: 24年前
投稿: 146
Topic starter  

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;とする
だけでいいのかと思っていたのですが、そんなわけないですよね。まだまだ勉強不足だと
痛感しました。
 バッファの意味がわからなくて、ずっと困っていたので助かりました。本当に
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました