Releaseビルド時にSetColumnが動作しない!?

[戻る]
秀水 [E-Mail] 2001/10/22(月) 10:02:42
おはようございます。秀水といいます。
環境はWin98,VC++6.0,MFC です。

SetColumnを使用してリストビューのColoumnの文字列変更を変更しています。

LVCOLUMN   lvcolumn;
CListCtrl&  lst = GetListCtrl();
lst.GetColumn(id + 1, &lvcolumn);
lvcolumn.pszText = "あいうえお";
lst.SetColumn(id + 1, &lvcolumn);

Debugでビルドするとリストビューの2列目のヘッダーが"あいうえお"に変更されます。
ところがReleaseでビルドするとリストビューのヘッダーが変更されません。(・_・?)

どこをチェックしていけばよいのか。
何を疑わなければならないのか検討がつきません。

助言いただけたらと思い発言させていただきました。
よろしくお願いいたします。

kazuma 2001/10/22(月) 10:30:03
lvcolumn を使う前に適切に初期化する必要があります。
もう一度 MSDN で SetColumn や LVCOLUMN の説明を読み直してみてください。

文字列を設定するだけなら GetColumn する必要はないです。

MSDN の CListCtrl::SetColumn の説明からの引用
> 構造体の mask メンバは、どの列属性を設定するかを指定します。
> mask メンバに LVCF_TEXT 値を指定すると、構造体の pszText メンバは NULL で終わる文字列のアドレスを
> 持ち、構造体の cchTextMax メンバは無視します。

クラフトマン 2001/10/22(月) 10:38:36
lvcolumnを初期化していないようだけど、それが原因では。
最低限maskメンバはきちんと初期化する必要があります。
DEBUGビルドで正常に動くのがたまたまだということだと
思います。

クラフトマン 2001/10/22(月) 10:40:38
kazumaさんの発言とかぶってしまいました。
ごめんなさい。

秀水 2001/10/22(月) 11:00:30
[[解決]]
maskで何を設定するか指定、その後値設定だったのですね。

秀水はおばかさんで、GetColumnで現状の設定をlvcolumnに取得。
文字列だけを変更したいので
lvcolumn.pszText = "文字列";
とやると勘違いしてました。(/o\)

lvcolumn.mask = LVCF_TEXT;
lvcolumn.pszText = "あいうえお";
lst.SetColumn(1, &lvcolumn);

でReleaseビルドでも思うように動作しました。

kazumaさん、クラフトマンさん ありがとうございました。m(_ _)m

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