我想在点击按钮时更新用户界面。但是,我没有在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()
函数。我该怎么做?
谢谢。
答案 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实例。
最后,我提供的可能解决方案可能有效,但也可能不正确。如果没有关于你要做什么的更多细节,我可以帮助你的更多细节。