当前在MFC中编写基于对话框的应用程序,当按下主对话框上的按钮时,该对话框将创建子对话框。然后,子对话框有3个编辑控制框和一个按钮。按下按钮时,将检索来自三个编辑控制框的信息并将其存储为单独的CStrings。这些CStrings传递给位于Main Dlg.cpp中的函数。该函数接受这些字符串并将它们插入列表控件中。程序构建正常并运行,直到按下添加按钮(在子对话框上)。不确定为什么程序崩溃我似乎有正确的参数?我也不确定这是否是在两个对话框之间传递这样的数据的最佳方法。任何更好的想法也值得赞赏。
弹出式添加按钮功能
void Popup::OnBnClickedPopadd()
{
CString str1, str2, str3;
CThermotronDlg dlg;
GetDlgItemText(ID_RampEdit,str1);
GetDlgItemText(ID_DwellEdit,str2);
GetDlgItemText(ID_TempEdit,str3);
dlg.ReciveAndDisplay(str1,str2,str3);
}
接收和显示功能
void CThermotronDlg::ReciveAndDisplay(CString str1, CString str2,CString str3){
LPCTSTR ramp(str1),dwell(str2),temp(str3);
MyListEx.InsertItem(1,ramp);
MyListEx.SetItemText(0,1,dwell);
MyListEx.SetItemText(0,2,temp);
}
答案 0 :(得分:1)
您需要找到主对话框的地址并直接调用此对话框的ReceiveAndDisplay方法,而不是在弹出对话框中初始化变量CThermotronDlg dlg;
。其中一种方法是访问应用程序对象的m_pMainWnd
公共变量(theApp
)。 OnBnClickedPopadd()
的正确代码为:
void Popup::OnBnClickedPopadd()
{
CString str1, str2, str3;
CThermotronDlg *pDlg = (CThermotronDlg*)theApp.m_pMainWnd;
GetDlgItemText(ID_RampEdit,str1);
GetDlgItemText(ID_DwellEdit,str2);
GetDlgItemText(ID_TempEdit,str3);
pDlg->ReciveAndDisplay(str1,str2,str3);
}