Releaseビルド時にSetColumnが動作しない!? – プログラミング – Home

Releaseビルド時にSetColu...
 
通知
すべてクリア

[解決済] Releaseビルド時にSetColumnが動作しない!?


秀水
 秀水
(@秀水)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

おはようございます。秀水といいます。
環境は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
 kazuma
(@kazuma)
ゲスト
結合: 23年前
投稿: 217
 

lvcolumn を使う前に適切に初期化する必要があります。
もう一度 MSDN で SetColumn や LVCOLUMN の説明を読み直してみてください。

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

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


返信引用
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 23年前
投稿: 72
 

lvcolumnを初期化していないようだけど、それが原因では。
最低限maskメンバはきちんと初期化する必要があります。
DEBUGビルドで正常に動くのがたまたまだということだと
思います。


返信引用
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 23年前
投稿: 72
 

kazumaさんの発言とかぶってしまいました。
ごめんなさい。


返信引用
秀水
 秀水
(@秀水)
ゲスト
結合: 23年前
投稿: 14
 

maskで何を設定するか指定、その後値設定だったのですね。

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

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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