[英]Update user dialog in 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
的相同地址m_edit1
给Click()
函数。 我怎么做?
谢谢。
每次单击时,都会创建一个新对话框。
CProjecttDlg * ptr =新的CProjectDlg();
您必须做的是仅创建一次(可能是在CMain构造函数中?还是第一次访问该点击)。 要存储其值,只需使ptr成为CMain的成员(在.h中定义,依此类推),而不是局部变量即可。
你那里有问题。 您正在调用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实例。
最后,我提供的可能的解决方案可能会起作用,但也可能不是“正确的”。 但是,如果没有更多关于您要做什么的详细信息,我将为您提供更多帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.