我试图在嵌套对话框中设置编辑框,但程序在运行时崩溃。我已经作出了如下因素的变化,以与第二对话连接:MFC控制嵌套对话框中的编辑框获取断言错误
1)类型的第一对话框中的OnInitDialog制成的成员变量的第二类(从CDialog派生)
2)()的在1秒的I类有:
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()的方法,所述程序崩溃。错误是:调试断言失败! dlgcore.cpp在线492 请帮忙,我现在正在为此苦苦挣扎,搜索了网络,但找不到原因。我没有包含整个代码,因为我认为它太多了,但如果你想让我添加一个你认为我错过了的函数,告诉我,我会将它添加到线程中。我正在使用MSVC2008
没有这样的函数“Show()”,我想你的意思是ShowWindow()。你知道如何初始化第二课的CEdit控件吗?因为如果我不用Create()手动创建对话框,因此不会调用OnInitDialog(),因此不会初始化m_cEGN。 – Goshutu 2012-04-07 17:47:12
ShowWindow()是正确的。 Create()完成一切,包括调用OnInitDialog。为什么你将它作为OnBedit()上的Modal窗口显示? – 2012-04-07 19:40:15
我的意图是有两个按钮 - 新建和编辑,它们打开相同的对话框,但使用编辑打开时,编辑框m_cEGN将是只读的。最后,特别是在制作过程中的一个想法,所以我认为编辑代码会更容易,而不是重写它。并设置事件处理程序的字段(在本例中为OnBedit())。您是否知道使用DoModal创建将参数传递到创建的窗口的方法? – Goshutu 2012-04-07 20:16:56