• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:メインダイアログのデータをウィンドウに反映させたい)

メインダイアログのデータをウィンドウに反映させたい

このQ&Aのポイント
  • メインダイアログからウィンドウを生成し、ダイアログの値を取得してウィンドウに反映させたい。しかし、どのようにすれば良いか分からない。
  • プログラムを添付します。
  • メインダイアログの値をウィンドウに反映させる方法についてアドバイスをお願いします。

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

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

CMyWindowクラスにメソッドを追加して CMyDlgから文字列を受け取れるようにします class CMyWindow : public CFrameWnd { private:   CString MyMainStr; //これを追加 public:   void SetMainStr( CString ss ); protected:   afx_msg void OnPaint();   DECLARE_MESSAGE_MAP() }; // OnPaintを変更 void CMyWindow::OnPaint() {   CPaintDC dc(this);   // この2行は不要   // CMyDlg dlg;   // MyMainStr = dlg.m_MyStr;   dc.TextOut(0, 0, MyMainStr); } // 追加メソッド void CMyWindow::SetMinStr( CString ss ) {   MyMainStr = ss; } // CMyDlgのOnOKを修正 void CMyDlg::OnOK() {   GetDlgItemText(IDC_EDIT1, m_MyStr);   const RECT rc = {10, 10, 320, 240};   m_pMyWnd = new CMyWindow();   m_pMyWnd->Create( NULL, "ダイアログから起動", WS_OVERLAPPEDWINDOW, rc, this,NULL);   // これを追加   m_pMyWnd->SetMainStr( m_myStr );   m_pMyWnd->ShowWindow(SW_SHOW); } といった具合です

fwhf0162
質問者

お礼

どうもありがとうございました。おかげで思うように動作しました。 勉強にもなりました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ダイアログのOKボタンを押してウィンドウを生成する方法は?

    ダイアログのOKボタンを押すとウィンドウが生成する方法を教えてください。 MFCでプログラミングしてメインウィンドウをダイアロボックスにしています //アプリケーション class CMyApp : public CWinApp { public: virtual BOOL InitInstance(); }; //メインダイアログ class CMyDlg : public CDialog { public: CMyDlg(CWnd *pParentWnd=NULL); protected: virtual void OnOK(); virtual void OnCancel(); }; #include <afxwin.h> #include <afxdlgs.h> #include <string.h> #include "dlg.h" #include "resource.h" CMyApp myApp; BOOL CMyApp::InitInstance(){ m_pMainWnd = new CMyDlg; m_pMainWnd ->ShowWindow(m_nCmdShow); m_pMainWnd ->UpdateWindow(); return TRUE; } CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) { Create("MYDLG"); } としています。 ダイアログはできるのですが、ここからウィンドウを生成する方法を教えてください

  • 連続してダイアログを表示したい?

    VC++6.0を使用しています。 以下のようなコードでダイアログを連続して表示しようと思っています。1番目のダイアログを表示してOKボタンを押下後(このときこのダイアログは消えて)、2番目のダイアログを表示したいと思っているのですが2番目が表示できません。(1番目のところをコメントにすれば2番目は表示できます。)どうして2番目のダイアログが表示できないのでしょうか? // 1番目のダイアログ   CTest1Dlg dlg;   m_pMainWnd = &dlg;   int nResponse1 =dlg.DoModal(); // 2番目のダイアログ   CTest2Dlg dlg;   m_pMainWnd = &dlg;   int nResponse2 =dlg.DoModal(); //   if (nResponse1 == IDOK) {   :以下省略 これだけの情報でアドバイスができますでしょうか? すみません。よろしくお願い致します。

  • DLLでダイアログ

    VC++6.0にてMFCを使うDLLを作成しています。 関連HPを参考になんとかDLLを作ることが出来ました。 そこで今度はDLL側でダイアログボックスを作成して表示させようとしたところうまくいきません。 エラーも無くスルーされてしまいます。 こういう使い方は出来ないのでしょうか。 ↓DLL関数のソースファイルです。 ---------------------------------------------- #include "StdAfx.h" #include "Defs.h" #include "Func.h" #include "resource.h" #include "testdlg.h" #include "dlg2.h" int WINAPI DllFunc( CString &p_rcStr, CWnd *p_pcWnd ) { TestDlg dlg; Cdlg2 dlg2; dlg.ps = p_rcStr; dlg2.DoModal();//なにも出ない AfxMessageBox(p_rcStr);//コレはOK dlg.DoModal();//何もでない return TRUE; } --------------------------------------------

  • メインダイアログを表示させずにファイル選択ダイアログを表示

    VC++2005のMFCダイアログベースでプログラムを作成しています。 自動生成されたプログラムを何も変更しないまま実行すると、 メインのダイアログが表示されますが、 そのダイアログを表示させずに、ファイル選択ダイアログを表示させたいのです。 自分で実装しビルド実行したところ、期待動作をしましたが、 ファイル選択ダイアログを閉じた後に、画像のようなエラーが発生してしまいます。 エラーを発生させず、期待動作をさせる良い実装方法をご存知の方おられましたら、 ご教示お願い致します。 【変更実装(エラー発生)】 BOOL CtestApp::InitInstance() { … CtestDlg dlg; m_pMainWnd = &dlg; // INT_PTR nResponse = dlg.DoModal(); //コメントアウト dlg.OnBnClickedButton1(); //ファイル選択ダイアログを表示する関数 //if (nResponse == IDOK) //コメントアウト //else if (nResponse == IDCANCEL) //コメントアウト … } void CtestDlg::OnBnClickedButton1() { CFileDialog ReadDlg( TRUE, NULL, "*.txt", OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, "txtファイル(*.txt)", this ); … }

  • VC++2005でのリソースコンパイルエラーについて

    よろしくお願いします。 猫でもわかる…… を参考にしながら、C言語でスクリーンセイバーを作成しています。 BCCForm and Skelton で作成したリソースをVC++2005で利用してます。 『設定のためのダイアログボックスを表示しないスクリーンセイバー』 はうまく行ったのですが、 『設定用ダイアログボックスを表示させるプログラム』 ではエラーが出てしまいます。 WS_EX_DLGMODALFRAME  この部分が良くないらしいのですが、コメントアウトしてみたり、 削除してみたり、記述を変えたりしたのですが、うまくコンパイルしてくれません。 詳しい方、アドバイスをお願いします。 //----------------------------------------- // BCCForm Ver 2.41 // An Easy Resource Editor for BCC // Copyright (c) February 2002 by ysama //----------------------------------------- #include "Resscreensav.h" //---------------------------------- // ダイアログ (DLG_SCRNSAVECONFIGURE) //---------------------------------- DLG_SCRNSAVECONFIGURE DIALOG DISCARDABLE 0, 0, 270, 180 EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_APPWINDOW STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX CAPTION "設定" FONT 8, "MS 明朝" { CONTROL "表示間隔", IDC_STATIC, "STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 24, 18, 63, 15 CONTROL "表示文字列", IDC_STATIC, "STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 24, 54, 63, 15 CONTROL "表示回数", IDC_STATIC, "STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 27, 93, 63, 15 CONTROL "", IDC_EDIT1, "EDIT", WS_CHILD | WS_DLGFRAME | WS_VISIBLE | ES_AUTOHSCROLL, 102, 18, 102, 15 CONTROL "", IDC_EDIT2, "EDIT", WS_CHILD | WS_DLGFRAME | WS_VISIBLE | ES_AUTOHSCROLL, 102, 51, 102, 15 CONTROL "", IDC_EDIT3, "EDIT", WS_CHILD | WS_DLGFRAME | WS_VISIBLE | ES_AUTOHSCROLL | ES_LEFT, 105, 90, 102, 15 CONTROL "OK", IDOK, "BUTTON", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 18, 144, 69, 15 CONTROL "キャンセル", IDCANCEL, "BUTTON", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 165, 144, 69, 15 } //-------------------------- // イメージ(MYBMP) //-------------------------- MYBMP BITMAP DISCARDABLE "C:\My Pictures\scan1\scan5.bmp" //-------------------------- // イメージ(ID_APP) //-------------------------- ID_APP DISCARDABLE "icon1.ico" //----------------------------------------- // BCCForm Ver 2.41 // Header File for Resource Script File // Copyright (c) February 2002 by ysama //----------------------------------------- //--------------------- // ダイアログリソース //--------------------- // ダイアログ DLG_SCRNSAVECONFIGURE #define IDC_STATIC 100 #define IDC_EDIT1 103 #define IDC_EDIT2 104 #define IDC_EDIT3 105 #define DLG_SCRNSAVECONFIGURE 2003 //--------------------- // メニューリソース //--------------------- //--------------------- // イメージリソース //--------------------- //#define MYBMP 200 //#define ID_APP 100 //--------------------- // ストリングテーブル //--------------------- //-------------------- // アクセラレーター //-------------------- //------------------ // ヴァージョン情報 //------------------ ------ ビルド開始: プロジェクト: screensav, 構成: Release Win32 ------ リソースをコンパイルしています... ..\..\..\..\Bitmap\screensav\screensav.rc(12) : error RC2104 : undefined keyword or key name: WS_EX_DLGMODALFRAME ビルドログは "file://c:\Visual Studio 2005\Projects\screensav\screensav\Release\BuildLog.htm" に保存されました。 screensav - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========

  • 変数の代入について

    ダイアログベースで、ダイアログ1からダイアログ2を開きダイアログ1のエディットボックスのデータをダイアログ2に表示する下記コードを教わりました。 変更後のようにしても問題ないと思いましたが、'dlg' は定義されていない識別子です。とエラーが出ます。 どうしてなのかお教えていただきたいのですが、 よろしくお願いします。 <変更前> CSubDlg dlg2; dlg2.m_strText = strText; dlg2.DoModal(); <変更後> void CSubDlg::OnPaint() { m_strText = dlg.strText; ちなみにdlgはウィザードが作ったコードで、 CMainDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); ダイアログ1のことだと思うのですが。。。。 ************************** メインダイアログとしてCMainDlgを例にしますが、かなり割愛します。 このダイアログには、Editが貼り付けられているとします。Editコントロールに割り当てたIDをIDC_EDIT_INPUTだと仮定します。 DDXとかのデータ変換を使う方法もありますが、ここでは単にデータを取得します。 // // OKボタンが押された時の処理 // void CMainDlg::OnOK() { // データの取得 CString strText; GetDlgItemText(IDC_EDIT_INPUT, strText); CSubDlg dlg2; dlg2.m_strText = strText; dlg2.DoModal(); } class CSubDlg : pbulic CDialog { public: CString m_strText; // 親から渡される文字列を格納する変数 ・ ・ ・ ・ ・ }; あとは、CSubDlgのOnPaintでテキストを描画します。 void CSubDlg::OnPaint() { // テキストをクライアント領域の中央に描画 CRect rect; GetClientRect(rect); CPaintDC dc(this); dc.TextOut(m_strText, rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); }

  • ダイアログと変数

    はじめまして。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などで、どういう指定をすればこのようになるのでしょうか?? よろしくお願いします。

  • BCC5.5とBCCFormを使用し、実行ファイルを作成したが、実行できません。

    当方、只今C言語でWin32APIを呼び出し、Windowsアプリを開発中です。 そこで質問なのですが、以下の手順で作業した場合、抽出される実行ファイルが実行できません。 どなたかお分かりになる方、助言の方よろしくお願いします。 1.名前、住所をリッチテキストに入力し、OKボタンを押下後、メッセージボックス  にて”○○さんの住所は○○です”と表示されるソースコードを"bcc32 -W source.cpp"でコンパイル。 2.BCCFormで作成したリソースファイルを"brc32 dialog.rc source.exe"で結合。 3.source.exeを実行するが、動作しない。 ちなみに環境はWindowsXPSP3です。 下記にまず、ソースコードを表示します。 /* ソース */ /* ファイル名 source.cpp */ #if 1 /* ダイアログボックスを出す */ #include <windows.h> #include "Resdialog.h" BOOL CALLBACK MyDlgProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain( HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { DialogBox(hCurInst, "MYDLG", NULL, (DLGPROC)MyDlgProc); return 0; } BOOL CALLBACK MyDlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { char szBuf[128], szBuf1[64], szBuf2[64]; switch(msg){ case WM_COMMAND: switch (LOWORD(wp)){ case IDCANCEL: EndDialog(hDlg, IDCANCEL); return TRUE; case IDOK: GetDlgItemText(hDlg, IDC_RICHEDIT102, szBuf1, (int)sizeof(szBuf1)); GetDlgItemText(hDlg, IDC_RICHEDIT103, szBuf2, (int)sizeof(szBuf2)); wsprintf(szBuf, "あなたの住所は%sで、氏名は%sです", szBuf1, szBuf2); MessageBox(hDlg, szBuf, "ダイアログボックス", MB_OK); return TRUE; } return FALSE; } return FALSE; } #endif そして、リソーススクリプトです。 /* リソーススクリプト */ /* ファイル名 dialog.rc */ //----------------------------------------- // BCCForm Ver 2.41 // An Easy Resource Editor for BCC // Copyright (c) February 2002 by ysama //----------------------------------------- #include "Resdialog.h" //---------------------------------- // ダイアログ (MYDLG) //---------------------------------- MYDLG DIALOG DISCARDABLE 0, 0, 270, 117 EXSTYLE WS_EX_DLGMODALFRAME STYLE WS_POPUP | WS_THICKFRAME | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_SETFONT CAPTION "Form" FONT 8, "MS 明朝" { CONTROL "名前", IDC_LABEL100, "STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 10, 10, 46, 18 CONTROL "住所", IDC_LABEL101, "STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 10, 41, 47, 17 CONTROL "", IDC_RICHEDIT102, "RICHEDIT", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_WANTRETURN | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 88, 8, 159, 25 CONTROL "", IDC_RICHEDIT103, "RICHEDIT", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_WANTRETURN | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 88, 40, 160, 24 CONTROL "OK", IDOK, "BUTTON", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 49, 85, 61, 18 CONTROL "Cancell", IDCANCELL, "BUTTON", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 165, 84, 56, 18 } そして、リソースヘッダです。 /* リソースヘッダ */ /* ファイル名Resdialog.h */ //----------------------------------------- // BCCForm Ver 2.41 // Header File for Resource Script File // Copyright (c) February 2002 by ysama //----------------------------------------- //--------------------- // ダイアログリソース //--------------------- // ダイアログ MYDLG #define IDC_LABEL100 100 #define IDC_LABEL101 101 #define IDC_RICHEDIT102 102 #define IDC_RICHEDIT103 103 #define IDCANCELL 105 //--------------------- // メニューリソース //--------------------- //--------------------- // イメージリソース //--------------------- //--------------------- // ストリングテーブル //--------------------- //-------------------- // アクセラレーター //-------------------- //------------------ // ヴァージョン情報 //------------------ 上記のようになってます。 どうかご教授の方、宜しくお願いします。

  • beginthread 引数

    #include <windows.h> #include <process.h> class CPti4Dlg::public CDialog { public: void test(void*); } void CPti4Dlg::test(void *) {    long ret;    float data[4]; ret = PtMultiInputEx(m_Id, 4, data); if(ret != 0) { ErrorHandling("PtMultiInputEx", ret); if(ret != 20102){ return; } } m_Edit_Ch0 = data[0]; m_Edit_Ch1 = data[1]; m_Edit_Ch2 = data[2]; m_Edit_Ch3 = data[3]; UpdateData(FALSE); } void CPti4Dlg::OnButtonInput() { _beginthread(&CPti4Dlg::test,0,NULL); m_Edit_Ret.SetWindowText("入力処理:正常終了"); } error C2664: '_beginthread' : 1 番目の引数を 'void (__thiscall CPti4Dlg::* )(void *)' から 'void (__cdecl *)(void *)' に変換できません。(新しい機能 ; ヘルプを参照) ------------------------------------------------------------------------------ これ問題全然ないです。 void CPti4Dlg::OnButtonInput() {    long ret;    float data[4]; ret = PtMultiInputEx(m_Id, 4, data); if(ret != 0) { ErrorHandling("PtMultiInputEx", ret); if(ret != 20102){ return; } } m_Edit_Ch0 = data[0]; m_Edit_Ch1 = data[1]; m_Edit_Ch2 = data[2]; m_Edit_Ch3 = data[3]; UpdateData(FALSE); m_Edit_Ret.SetWindowText("入力処理:正常終了"); }

  • ダイアログ間のメッセージの送信について

    いつもお世話になっております。 現在、Visual Studio 2005にてMFCのダイアログベースのアプリケーションを作成しており、メッセージの送信の件で詰まった箇所があり質問させて頂きました。 現在のアプリケーションの全体像なのですが、 ダイアログベースなので、アプリケーション立ち上げ時に1つメインダイアログが表示されます。 そのメインダイアログ内にボタンを設置したとして、それぞれのボタン1,ボタン2からダイアログ1,ダイアログ2をDoModal()で表示させます。 それぞれのダイアログ1,2にはボタンが1つずつ設置されているとします。 質問させて頂きたいことは メインダイアログへダイアログ1,2からメッセージ送信をする場合には ::SendMessage(GetParent()->GetSafeHwnd(),MYMSG,0); でメッセージ送信をすることは出来ました。 しかしメインダイアログから呼び出されるダイアログ1,2間でメッセージを送信する場合に,例えばダイアログ1からダイアログ2へメッセージを送信させたいときに void C****1Dlg::OnBnClicked(){ C****2Dlg m_dlg2; ::SendMessage(m_dlg2.GetSafeHwnd(),MYMSG,0); とダイアログ1のボタンクリック時の関数内にコードを入力してもダイアログ2へメッセージは送信されず(ダイアログ2内のメッセージ受信関数OnMyMsg()が呼ばれず)、そのままスルーされるようなのです。 上述のコードで何か間違えている箇所があるでしょうか? メッセージを扱うのは初めてで、とにかく相手先のウィンドウのハンドルを取得できればいいのかなと思ってコードを書いてみたのですが。。 ご存知の方がいらっしゃいましたら、ご意見宜しくお願い致します。 尚、開発環境は Windows CE 6.0 Visual Studio 2005 です。