C++ 在MFC中更新用户对话框

C++ 在MFC中更新用户对话框,c++,mfc,C++,Mfc,我想在单击按钮时更新用户界面。但是,我没有在CProjectDlg中使用直接方法。我在班上有一个CMain来处理这个手术 这是我的密码: ProjectDlg.cpp void CProjectDlg::OnBnClickedButton1() { CMain *ptr = new CMain(); ptr->Click(); CString test = m_edit1; } Main.cpp void CMain::Click() { CProjec

我想在单击按钮时更新用户界面。但是,我没有在CProjectDlg中使用直接方法。我在班上有一个CMain来处理这个手术

这是我的密码:

ProjectDlg.cpp

void CProjectDlg::OnBnClickedButton1()
{
    CMain *ptr = new CMain();

    ptr->Click();
    CString test = m_edit1;
}
Main.cpp

void CMain::Click()
{
    CProjecttDlg *ptr = new CProjectDlg();

    ptr->m_edit1.SetString(L"This is a test.");
}
在调试模式下,我发现
m_edit1
的地址不一样。所以这个函数是无用的

我需要将相同的
m_edit1
地址传递给
Click()
函数。我该怎么做


谢谢。

每次单击都会创建一个新对话框

CProjecttDlg*ptr=新的CProjectDlg()


您必须做的是只创建一次(可能是在CMain constructor?或第一次访问click时)。要存储其值,只需将ptr设置为CMain的成员(在.h中定义,等等),而不是局部变量。

您遇到了一个问题。您正在从CProjectDlg实例调用CMain::Click,但在CMain::Click中创建一个新的CProjectDlg实例,并在该新对话框中设置编辑框,而不是在原始对话框中

我不知道您到底想做什么,但有一件事可以做到,那就是将指向对话框的指针传递给CMain构造函数,然后在CMain::中单击“使用它”以设置编辑框。大概是这样的:

//CMain.h
class CMain
{
public:
    CMain(CProjectDlg*);

    Click();
protected:
    CProjecDlg* m_Dlg;
}

// CMain.cpp
CMain::CMain(CProjectDlg* dlg)
{
    m_Dlg = dlg;
}

CMain::Click()
{
    m_Dlg->m_edit1.SetString(L"This is a test.");
}
除此之外,我不知道是否有必要在用户每次单击底部时创建一个新的CMain实例

最后,我提供的可能解决方案可能有效,但也可能不“正确”。如果没有更多关于你想做什么的细节,我也帮不了你多少