在MFC中更新用户对话框

时间:2011-04-05 21:58:36

标签: c++ mfc

我想在点击按钮时更新用户界面。但是,我没有在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()函数。我该怎么做?

谢谢。

2 个答案:

答案 0 :(得分:0)

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

  

CProjecttDlg * ptr = new CProjectDlg();

你必须做的只是创建一次(也许是在CMain构造函数?或第一次点击访问)。要存储它的值,只需使ptr成为CMain的成员(在.h中定义,依此类推)而不是局部变量。

答案 1 :(得分:0)

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

我不确切地知道你要做什么,但有一件事可行的方法是将一个指向对话框的指针传递给CMain构造函数,然后在CMain :: Click中使用它来设置编辑框。像这样:

//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实例。

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