我试图在嵌套对话框中设置一个编辑框,但程序在运行时崩溃。我进行了以下更改以与第二个对话框建立联系:
1)在第二类类型的第一个对话框中创建成员变量(派生自CDialog)
2) 在 1s 类的 OnInitDialog() 中,我有:
CRect rcDlg;
m_dDlgData.Create(CDialogData::IDD, this); // Create the second dialog
GetWindowRect(rcDlg);
m_dDlgData.SetWindowPos(NULL, 0, 0, rcDlg.Width(), rcDlg.Height(), SWP_NOZORDER);
3) 在第二类中创建了一个 CEdit 变量,该变量是公共的,以便从第一类访问它。4)在按钮的事件处理程序中(在第一个对话框中),我想将给定的编辑框(在第二个对话框中)设为只读,并在另一个事件处理程序中禁用只读属性。这是发生错误的代码:
void CZad1SemovDlg::OnBedit()
{
m_dDlgData.EGNReadOnly(true);//no problems here
///some code///
if(m_dDlgData.DoModal() == IDOK)// <-- the error happens here
{
//more code
}
}
bool CDialogData::EGNReadOnly(bool check)
{
m_cEGN.SetReadOnly(check);//here nothing strange happens, the variable is
//initialised
return true;
}
奇怪的是,控件和对话框变量已初始化,但是当我运行 DoModal() 方法时,程序崩溃了。错误是:调试断言失败!第 492 行的 dlgcore.cpp 请帮助,我正在为此苦苦挣扎一段时间,在网上搜索,但找不到原因。我没有包含整个代码,因为我认为它会太多,但是如果您希望我添加您认为我错过的功能,请告诉我,我会将其添加到线程中。我正在使用 MSVC2008