2011-04-05 54 views
0

我想单击按钮时更新用户界面。但是,我没有在CProjectDlg中使用直接方式。我有一个CMain类来处理操作。更新MFC中的用户对话框

这里是我的代码:

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()函数。我怎么做?

谢谢。

回答

0

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

CProjecttDlg * ptr = new CProjectDlg();

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

0

你有问题。您正在调用CMain ::单击一个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实例。

最后,我提供的可能的解决方案可能会起作用,但它也可能不是“正确的”。尽管没有关于你想要做什么的更多细节,但我没有更多的帮助你。