グループボックス – プログラミング – Home

通知
すべてクリア

[解決済] グループボックス


dialog
 dialog
(@dialog)
ゲスト
結合: 15年前
投稿: 3
Topic starter  

MFC VS2005 ダイアログベースで開発しています。

ダイアログにグループボックスがありそのCaptionを動的に変更したいと考えています。
初期値として OnInitDialog()でそのグループボックスのCaptionを

CString a;
a.Format(%d %s, i,str); // strは文字列
mddxBox.SetWindowTextA(a); // mddxBoxはコントロール変数

としています。
実行すると Captionが %sの部分しか描画されていません。

1 hogehoge <-- ○
hogehoge <-- 現状

同じロジックをinit以外でも使うのですが、その時は
1 hogehoge と描画されます。

これだけの処理ですがどこが問題なのでしょうか?


引用未解決
トピックタグ
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

再現しませんなぁ。
テストしたコード:
int i = 1;
LPCTSTR str = hogehoge;
CString a;
a.Format(%d %s, i,str); // strは文字列
mddxBox.SetWindowTextA(a); // mddxBoxはコントロール変数
プロジェクトの設定の文字セットはマルチバイトに変更済み。

> 同じロジックをinit以外でも使うのですが、その時は
> 1 hogehoge と描画されます。
デバッガでinit時にCString a;の値を調べて、Formatの問題か、SetWindowTextAの問題
かを切り分けた方がよいでしょう。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2659
 

CDialog::OnInitDialogが動作する前にやってませんか?
そのタイミングだと多分コントロールが出来ていないのではないかと思うのですが。
元々のリソース上でhogehogeと設定しているなら、
コードで指定している部分が単に失敗してリソースの方が出ていると言う
事も考えられると思いますけれど。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

OnInitDialog()内であると本人が記述しているのを信じると

1.まだ、mddxBoxのm_hWndが無効な状態だった

が考えられます。
DoDataExchange()を疑ってみるか、使ってなければ
mddxBoxのウインドウ構築又は、HWNDの取得&初期化
部分を確認するのが吉かもしれません。


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

OnInitDialog内で
デフォルトで呼び出すようになってるCDialog::OnInitDialog()前に
SetWindowTextするとウィンドウがないのでエラーでとまるはず


返信引用
dialog
 dialog
(@dialog)
ゲスト
結合: 15年前
投稿: 3
Topic starter  

皆様 ご協力ありがとうございます。

・CDialog::OnInitDialog()を呼んだあとに処理しています。
・init時、デバッガで値を見ましたが、CString, SetWindowTextとも
 どちらも値は正しく設定されていました。
 init時以外の使用時も値は同じでした (←こちらの場合は正しく表示される)
・リソースの方は デフォルトの ”スタティック”から変更していません。

となっています。
よくわかりません・・・


返信引用
みい
 みい
(@みい)
ゲスト
結合: 22年前
投稿: 65
 

そのコントロールに文字列をセットしている箇所に全てブレークポイント
をセットして動かしてみてはいかがでしょうか。

[ちなみに以前同僚が同じような現象に陥っていた時のオチ]
アクティブだったかフォーカスだったかのイベントから呼ばれる関数内で
SetDlgItemTextやってた(SetWindowTextで探してたから見つからなかった。
何故かそこだけSetDlgItemText使ってた)


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

ほかの方法として

OnInitDialog内の、SetTextWindowをコメントアウトして
リソースのままの「スタティック」が表示されるかどうかを試すのはどうでしょうか

コメントアウトしてるのにhogehogeに変われば、
OnInitDialog以外の場所に原因がいるはず
変わらないなら、やっぱり原因はOnInitDialog内ということになるが・・・

#あとついでに、中間ファイルを消して、完全にリビルドも試す価値あるかも


返信引用
dialog
 dialog
(@dialog)
ゲスト
結合: 15年前
投稿: 3
Topic starter  

他に書き込みをしている箇所がありました・・・。
「スタティック」が表示されるか確認したところ出てこない・・

そこで、調べると、他にもhogehogeを書いているところがありました。

そこの処理をなくすと普通に動作しました。

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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