グループボックス

[戻る]
dialog 2009/12/01(火) 15:22:03
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 2009/12/01(火) 17:28:45
再現しませんなぁ。
テストしたコード:
 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 2009/12/02(水) 11:16:46
CDialog::OnInitDialogが動作する前にやってませんか?
そのタイミングだと多分コントロールが出来ていないのではないかと思うのですが。
元々のリソース上でhogehogeと設定しているなら、
コードで指定している部分が単に失敗してリソースの方が出ていると言う
事も考えられると思いますけれど。

仲澤@失業者 2009/12/02(水) 16:35:12
OnInitDialog()内であると本人が記述しているのを信じると

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

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

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

dialog 2009/12/03(木) 11:25:29
皆様 ご協力ありがとうございます。

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

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

みい 2009/12/03(木) 11:50:34
そのコントロールに文字列をセットしている箇所に全てブレークポイント
をセットして動かしてみてはいかがでしょうか。

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

ryo 2009/12/03(木) 12:22:10
ほかの方法として

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

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

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

dialog 2009/12/04(金) 08:13:23
[[解決]]
他に書き込みをしている箇所がありました・・・。
「スタティック」が表示されるか確認したところ出てこない・・

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

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

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

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