子ダイアログのデータを親ダイアログで取得する方法

このQ&Aのポイント
  • VC6.0のMFCでダイアログベースアプリケーションを作成しています。親ダイアログのメニューを選択すると、子ダイアログが開きます。テキストボックスに文字を入力し、ボタンを押下すると、入力した数字がグローバル変数(igStatu)に代入されます。しかし、子ダイアログで設定したデータが親ダイアログに受け渡されず、親ダイアログ側にデータが入りません。どのようにしたら、子ダイアログで設定したデータを親ダイアログで取得できるのでしょうか?
  • この問題にはC++とMFCの知識が必要ですが、全く理解していなくても大丈夫です。子ダイアログで設定したデータを親ダイアログで取得する方法を教えてください。
  • 親ダイアログと子ダイアログの間でデータを受け渡す方法について教えてください。VC6.0のMFCを使用しており、親ダイアログのメニューから子ダイアログを開き、子ダイアログで入力したデータを親ダイアログで利用したいです。
回答を見る
  • ベストアンサー

子ダイアログのデータを親ダイアログで取得するには

VC6.0にてMFCでダイアログベースアプリケーションを作成しています。 親ダイアログ(TestDlg.cpp)のメニューを選択すると、子ダイアログ(SetDlg.cpp)が開き、テキストボックスに文字を入力し、ボタン押下によりテキストボックスの入力数字を確定(グローバル変数(igStatu)に代入)しています。 子ウインドウで入力確定したデータを、親ダイアログにて使用したいのですが、データが受け渡されずに、親ダイアログ側にデータが入りません。 どのようにしたら、子ダイアログで設定したデータを親ダイアログで取得することができるのでしょうか? C++、MFCともに全然わかっていませんがお願いします。 グローバル変数は、TestDlg.cpp、SetDlg.cppがインクルードしているTest.h内にstatic宣言しています。 static宣言しないとリンクエラー2005になってしまいます。

  • JIND
  • お礼率20% (5/24)

質問者が選んだベストアンサー

  • ベストアンサー
  • kmb01
  • ベストアンサー率45% (63/138)
回答No.1

Test.h内で extern int igStatu; TestDlg.cpp内で int igStatu; とすればいいのでは? externについて調べてみてください。

参考URL:
http://homepage3.nifty.com/mmgames/c_guide/20-02.html
JIND
質問者

お礼

できました。ありがとうございます。 まったく初歩がわかっていませんでした。

関連するQ&A

  • VBAでstatic変数を宣言するとトラブル

    フォームにクエリーを基にしたリストボックスがあり、クエリーの抽出条件には同じフォームのテキストボックスを指定しています。テキストボックスには規定値プロパティーで"*"を設定しています。 それで問題なく開くことが出来ていたのですが、必要があってフォームモジュールでStatic変数を宣言したところ、クエリーが機能せず、指定したテキストボックスのパラメーター入力ダイアログが表示されます。static変数の宣言を削除するとちゃんと動きます。public変数やモジュール変数を宣言してもおなじ現象が起きます。 原因はなんでしょうか。またどうすればstatic変数などを使うことが出来るのでしょうか? よろしくお願いします。

  • 子ウィンドウから親ウィンドウへデータを渡すには?

    宜しくお願いします。 <環境> WIN98 VC++6.0 MFC  ダイアログのボタン押し下げでウィンドウを生成し、ダイアログのテキストボックスに入力した文字をウィンドウに表示しています。 また、ウィンドウ生成後はダイアログを非表示にしています。 void CInput::OnButton1()//ウィンドウの生成 { UpdateData (TRUE); pWnd = new CMyWnd( this); pWnd->m_moji=m_InputData; //テキストボックスの文字をウィンドウに表示されるう変数m_mojiに代入 pWnd->Kado_Create(this); ShowWindow(SW_HIDE); //ダイアログの非表示 } ウィンドウをダブルクリックすると、ダイアログを非表示から表示にし、ウィンドウに表示されている文字をダイアログのテキストボックスに表示させるために以下のようにしましたが、文字は表示されません。 どのようにすれば表示されるようになりますか? void CMyWnd::OnLButtonDblClk(UINT nFlags, CPoint point) { CInput* pInput = (CInput*)GetParent(); // CInputは親ダイアログのクラス pInput->m_InputData=m_moji;//変数に正しい文字が代入されていることは確認できました UpdateData(FALSE); pInput->ShowWindow(SW_SHOW); CWnd::OnLButtonDblClk(nFlags, point); }

  • ダイアログと変数

    はじめまして。VC++ Ver.6を使ってダイアログベースのアプリを作成しようと思っています。 ダイアログ上に [IDC_BOX1] [IDC_BOX2] [IDC_BOX3] と3つ入力ボックスを作ったのですが、 上から 「m_box[0]」「m_box[1]」「m_box[2]」という具合に 変数名をつけたいのですが、どうやればいいのかよくわかりません。 結果として hogehoge.h のダイアログデータの宣言部分に 「CString m_box[3]」と表示させるようにしたいのですが、 ClassWizardなどで、どういう指定をすればこのようになるのでしょうか?? よろしくお願いします。

  • 子ダイアログのコントロールにフォーカス(VC++2005)

    お世話になります。 Visual Studio 2005でVC++の開発をしております。 ダイアログを2つ用意して、一つはstyleを「ポップアップ」に、 もう一つは「子」にしてます。 親ダイアログ内にタブをセットし、その上に子を乗せる処理を行っていて 親のダイアログのボタンイベントから子のダイアログのコントロールにフォーカスを 当てたいのですが、どのようにしたらよろしいのでしょうか? 親ダイアログ内では、 (子ダイアログ).Create(子ダイアログクラス, this); で生成して MoveWindowやShowWindowで位置・表示の設定を行っています。 親から子ダイアログ内のコントロールの入力チェックを行おうと思い、 未入力判定まではできたのですが どうしてもSetFocus()でフォーカスが当たりません。 どなたかご教授していただけますでしょうか?

  • 子フォームから親フォームへのデータの受け渡し

    いつもお世話になっております。 VB.NETの質問です。 親フォームから子フォームを開き、子フォームで検索した結果を親フォームに返したいです。 はじめはテキストボックスへ表示させており、何の問題もなく出来ていたのですが、 仕様を変更してコンボボックスやラベルのテキストに表示させるようにしたら、子フォームからデータを取れなくなりました。というか表示されなくなりました。子フォームのme.close()する直前の変数の値にはデータが入っているのですが・・・ なんでなんでしょうか? 開発一筋でやられてきた方には、本当に初歩的な質問だと思いますが、 よろしくお願い致します。

  • 変数について

    .net2003でMFCダイアログを作成中です。 今AダイアログとBダイアログがあります。 Bにはエディットボックスが1つあり、 Aにはボタンが1つあります。 Aにあるボタンを初めて押下した場合にはBのエディットボックス内に [1]を。 Bを閉じて再びAにあるボタンを(2回目)押下した場合にはBのエディットボックス内には[2]と表示させたいです。 これの繰り返しを行いたいのですが、どのようなプログラムにすればよいのでしょうか? Aヘッダで int aaa; // ボタンを押した回数を保存する変数 A.cpp AのOnBnButtonClicked関数内に aaa += 1; //もちろんOnInit内で初期化済み として B.cpp内で if(aaa == 1){ ....... } とやろうとしたのですが当然怒られてしまいます。 ご教授の程よろしくお願いいたします。

  • MFCダイアログの終了判定

    開発環境:VC++2008 MFCダイアログ プロジェクト作成名:test 簡単なMFCの処理内容を勉強しています。 画像のようなダイアログベースで処理を行っており、 処理の流れは以下です。 1. "参照"で実行ファイルを選択 2. "エディットコントロール"で読み込んだディレクトリの絶対パスを表示 3. "起動"で実行を行う。 上記のプログラムにINIでの保存/読み込みを追加し、(iniは本プログラムと同階層に) 毎回、参照から読み込まなくても、次回以降は自動で変数に読み込まれるようにしようと思ってます。 そこで分からないことが2つあります。  ・質問1: test.cppで閉じるボタンが押されたときに処理を行う方法  ・質問2: INIの同ディレクトリに保存をtestDlg.cpp側で行う方法 質問1補足:  以下のようなOK/キャンセル処理が最初からありますが、  これらのような形式でtest.cpp側で終了判定を行いたいです。 --------------------------------------- INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: ダイアログが <OK> で消された時のコードを // 記述してください。 } else if (nResponse == IDCANCEL) { // TODO: ダイアログが <キャンセル> で消された時のコードを // 記述してください。 } --------------------------------------- ですが、私のプログラムではOK/キャンセルは使っていないので 閉じるボタンを押したとき、上記のような処理をさせることはできないでしょうか? できるならば、そこにINIの保存処理を入れたいと思います。 質問2補足:  test.cppのCtestApp::InitInstance()にて --------------------------------------- TCHAR path[_MAX_PATH+1]; GetModuleFileName( NULL, path, _MAX_PATH ); PathRenameExtension( path, TEXT(".ini") ); free((void*)m_pszProfileName); m_pszProfileName=_tcsdup(path); --------------------------------------- "本プログラムを実行したときと同じディレクトリにINIを保存する" ようにしているので testDlg.cppでボタンを押したときに保存する処理を行うと、 保存される場所がWINDOWSファイルの方に行ってしまうため、 どうしていいかわからない状況です。 初歩的な質問ですが、何卒宜しくお願いします。

  • [再掲載]子ダイアログの表示について

    今、VS2017(VC++2017)を使って、親ダイアログ上のボタンを押すと子ダイアログを表示するプログラムを作っています。 しかし、その方法(ソースコード)がわかりません。誰か教えてください。 (追記)VC++2017に限った情報をください。 (お詫び)前回、質問文で「MS2017」と表記してしまいましたが、「VS2017」の間違いでした。すみませんでした。

  • 子ウィンドウから親ウィンドウへの値渡し

    親ウィンドウから子ウィンドウを開くとします。 その子ウィンドウのテキストフィールドに入力した値を、子ウィンドウ上のボタンを押下した際に親ウィンドウのテキストフィールドに表示させることってできるんでしょうか?

  • 子→親ウインドウへデータを受け渡し、子ウィンドウを閉じる。

    このような処理はできないでしょうか? 子ウィンドウはコード番号の検索用。該当のコードのリンクをクリックすると、そのコード番号を親ウィンドウのテキストボックスへ落とし込む。そのタイミングで、子ウィンドウは閉じる。 子→親ウインドウへのデータの受け渡しと、子ウィンドウのクローズを同時に行うようなイメージです。 よろしくお願いします。

専門家に質問してみよう