• 締切済み

VC++ MFC

MFCの初心者です。 MFC環境は2003.NETです。 現在はメインダイアログからサブダイアログを呼び出すコードを編集しています。メインダイアログから2回以降サブダイアログを呼び出す際にその前のダイアログのチェックボックスやリストボックスの情報を記憶させておきたいのですが、なにかいい方法があれば是非ご教授お願いいたします。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

dlg.DoModal()でサブダイアログを表示しているのであれば DoModalからの返り値を受け取ってこれを判断材料にして サブダイアログの情報をメインダイアログ側で受け取って保存しておきましょう チェックボックスやリストボックスの情報を得るには GetMyCheckやGetMyListなどユーザー定義関数などでコントロールから情報を得る方法や、ダイアログのメンバー変数とコントロールを結びつけておくなどいろいろな方法があります MFCでしたら ダイアログの編集画面を表示させておいて 変数と結び付けたいコントロールを選択します VC2003のメニューから プロジェクト > 変数の追加 で 変数名などを定義しましょう このときアクセス(A)が『public』ならば外部からもその変数は使えます たとえば CheckBoxに対して追加した変数が m_myCheckだったとして コントロール型なら dlg.m_myCheck.GetCheck() # この場合 m_myCheckがCButton型なので GetCheckでチェックされているかを取得する 値(Value)型ならば dlg.m_myCheck # 値型の場合は ダイアログが閉じる際に変数を更新してから閉じるため変数のチェックのみでいい # キャンセルボタンや ダイアログの閉じるボタンの場合は更新されない場合があります といった具合で使えます なんにせよ 今あるコントロールがどのような管理がなされているのかを明示しましょう ダイアログのコントロールを管理できる変数がどこにあるのかなど …

tuyafu0803
質問者

補足

解答ありがとうございます。 チャックボックスの値の取得が分かりましたが、listboxの情報(アイテムを選択した時(背色がついた部分))をどうやってメイン側で受け取るかうまくいきませんが、まだお願いいたします。

回答No.3

下の回答をした者です。 失礼。コンストラクタでCButtonを呼んではだめですね。 コンストラクタで値をもらったら、それをCSubDialogにメンバとして持っておき、OnOnInitDialogなどで設定する必要があると思います。 失礼しました。

tuyafu0803
質問者

補足

>DoModalで表示されたモーダルダイアログということでいいですかね。 説明不足で申し訳ありません、その通りです。 CSubDialogData ddata=dlg.getSettingData(); とか。 >このCSubDialogDataとかgetSettingDataとかは設定内容によって自分で >作りましょう。 >で、このもらったデータをメインダイアログのデータメンバに持って >おきます。 >で、サブダイアログのコンストラクタにこのデータを受け取る >コンストラクタを追加する。 CSubDialog::CSubDialog(CSubDialogData ddata) 申し訳ありませんが、初心者でよくわからないので、もう少し詳しく教えていただければ、、、、 お願いいたします。

回答No.2

DoModalで表示されたモーダルダイアログということでいいですかね。 モードレスダイアログだと多少話が違ってくるのですが…。 普通は、メインダイアログに値をもらって持っておくと思います。 ボタンAでクラスCSubDialogのダイアログを表示させるとき、 void CMainDialog::OnBtnA() { CSubDialog dlg; dlg.DoModal(); } のようなことをすると思います。 このDoModalが戻ってきたとき、すでにダイアログは終了しているので、dlgのメンバ関数を呼んで設定した値をもらいます。 例えば、DoModalのあとに、 CSubDialogData ddata=dlg.getSettingData(); とか。 このCSubDialogDataとかgetSettingDataとかは設定内容によって自分で作りましょう。 で、このもらったデータをメインダイアログのデータメンバに持っておきます。 で、サブダイアログのコンストラクタにこのデータを受け取るコンストラクタを追加する。 CSubDialog::CSubDialog(CSubDialogData ddata) とか。 で、この中でCButton::SetCheckとかで各種設定項目を初期化する、と。

回答No.1

WriteProfileInt, ReadProfileIntでレジストリに保存するのが良いと思います。