メインダイアログのデータをウィンドウに反映させたい
メインダイアログからウィンドウを生成しています
ダイアログの値を GetDlgItemText()関数で取るまではいいのですが
それから、値をウィンドウに反映できません。
メンバ値を遣うと思うのですが、どうすればいいのでしょうか?
プログラムを添付します
/////////////////////////////////////////////////////////
// dlg.rc
#include "resource.h"
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
MYDLG DIALOG DISCARDABLE 0, 0, 134, 80
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "ダイアログからウィンドウ"
FONT 9, "MS Pゴシック"
BEGIN
DEFPUSHBUTTON "OK",IDOK,15,55,50,14
PUSHBUTTON "キャンセル",IDCANCEL,65,55,50,14
EDITTEXT IDC_EDIT1,15,10,100,35,ES_AUTOHSCROLL
END
//////////////////////////////////////////////////
// resource.h
#define IDC_EDIT1 1000
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
////////////////////////////////////////////////////////
// dlg.h
//アプリケーション
class CMyApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
//ウィンドウ
class CMyWindow : public CFrameWnd
{
private:
CString MyMainStr;
protected:
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
};
//メインダイアログ
class CMyDlg : public CDialog
{
public:
CString m_MyStr;
CMyDlg(CWnd *pParentWnd=NULL);
CMyWindow* m_pMyWnd;
protected:
virtual void OnOK();
virtual void OnCancel();
};
/////////////////////////////////////////////
// DlgWnd.cpp
#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*/):m_pMyWnd(NULL)
//イニシャライザでポインタをNULLに初期化
{
Create("MYDLG");
}
BEGIN_MESSAGE_MAP(CMyWindow, CFrameWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
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->ShowWindow(SW_SHOW);
}
void CMyDlg::OnCancel()
{
DestroyWindow();
}
void CMyWindow::OnPaint()
{
CPaintDC dc(this);
CMyDlg dlg;
MyMainStr = dlg.m_MyStr;
dc.TextOut(0, 0, MyMainStr);
}
よろしく御願いします
お礼
早速のご返信、ありがとうございます。 すぐに試してみたところ、ちゃんと処理が行われるようになりました。 Dialog2.Show() だけでは見せるだけですぐ下に処理が行ってしまうんですね。 勉強になりました。