ダイアログベースでのエディットボックスへの書き込み

[戻る]
こんの 2002/05/19(日) 00:41:16
VC++(MFC)を使ってダイアログベースのプログラムを製作しています。
ダイアログ上のボタンを押すと特定の動作をしてその結果を
エディットボックスに書き出したいのですが、どうもその方法がわかりません。
コントロールのメンバ変数では、ダイアログの生成時か消滅時にしか
コントロール内容にアクセスできないのでしょうか?
SetDlgItemText関数を使おうともしたのですが、ウィンドウハンドルが不明です。
ダイアログベースのプログラムを起動したままダイアログ上の
エディットボックスの内容を変更したいときはどのようにすれば
よいのでしょうか? 教えてください。

sugar 2002/05/19(日) 01:04:27
> SetDlgItemText関数を使おうともしたのですが、ウィンドウハンドルが不明です。
>
ウィンドウハンドル?
Windows APIのSetDlgItemText関数ですね、それは?
第1引数のウィンドウハンドルは、ダイアログのハンドルです。
でもせっかくMFCを使用しているのですから、CWnd::SetDlgItemText()を使いましょうよ。

> コントロールのメンバ変数では、ダイアログの生成時か消滅時にしか
> コントロール内容にアクセスできないのでしょうか?
> 
そんなことはありません。
エディットボックスを変数として追加しているなら、
CWnd::SetWindowText()でもテキスト設定が可能です。
CEdit m_wndEdit;
m_wndEdit.SetWindowText("Hoge");

他にもDDXなんていうテクもあります。

さなえ 2002/05/19(日) 01:38:34
>コントロールのメンバ変数では、ダイアログの生成時か消滅時にしか
>コントロール内容にアクセスできないのでしょうか?

そのタイミングでUpdateDataが呼ばれてコントロールの”値”のメンバ変数が
反映・更新されているだけで、途中でアクセスできないわけではないです。
UpdateDataからDDX(DoDataExchangeだったかな?)が呼ばれます。
クラスウィザードで設定したメンバ変数が”コントロール”の場合
sugar さんのおっしゃる方法が使えます。

こんの 2002/05/19(日) 23:00:22
[[解決]]
sugar様、さなえ様、はやい回答ありがとうございました。
結局、メンバ変数をコントロールで定義して、sugarさんのおっしゃるように
関数をつかってエディットボックスに書き込みできました。
ヘルプを見たらDoDataExchangeに関してもしっかり載っていたので
それも参考にしながら、おりをみてDDXのほうでもやってみたいと思います。
大変ありがとうございました。

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