アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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
# 値型の場合は ダイアログが閉じる際に変数を更新してから閉じるため変数のチェックのみでいい
# キャンセルボタンや ダイアログの閉じるボタンの場合は更新されない場合があります
といった具合で使えます

なんにせよ 今あるコントロールがどのような管理がなされているのかを明示しましょう
ダイアログのコントロールを管理できる変数がどこにあるのかなど …

この回答への補足

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

補足日時:2009/12/21 22:36
    • good
    • 0

下の回答をした者です。


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

失礼しました。

この回答への補足

>DoModalで表示されたモーダルダイアログということでいいですかね。

説明不足で申し訳ありません、その通りです。

CSubDialogData ddata=dlg.getSettingData();
とか。
>このCSubDialogDataとかgetSettingDataとかは設定内容によって自分で
>作りましょう。

>で、このもらったデータをメインダイアログのデータメンバに持って
>おきます。
>で、サブダイアログのコンストラクタにこのデータを受け取る
>コンストラクタを追加する。
CSubDialog::CSubDialog(CSubDialogData ddata)
申し訳ありませんが、初心者でよくわからないので、もう少し詳しく教えていただければ、、、、
お願いいたします。

補足日時:2009/12/20 20:51
    • good
    • 0

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とかで各種設定項目を初期化する、と。
    • good
    • 0

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

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!