メインダイアログのデータをウィンドウに反映させたい
メインダイアログからウィンドウを生成しています
ダイアログの値を 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);
}
よろしく御願いします
お礼
お手数ですがその値を受け取る方のプログラムはどうすればいいのかおしえてください。 普通に CTestDlg dlg; CString aa; dlg.Tstr=aa; MessageBox(aa)としましたが値が全く移ってません;
補足
ポインタでなくてもいいのですが以前やったときにエラーはでなかったのですが、値が移せなかったのでポインタ使わないといけないのかなとおもっていました。初期化することでifは実行されますが肝心のプログラムの方は やはりエラーになりますね。