说的是在MFC中:
CModDlg mod;
mod.DoModle();
}
对话框关闭后,窗口销毁,调用上面PostNCDestroy(){delete this;},然后函数执行完毕,mod消失,相当于delete mod;同一对象,删除的两次,故崩溃。
protected:
CDlg* m_pmydlg;//利用向导添加变量,方式一
CDlg m_mydlg;//利用向导添加变量,方式二
};
如采用方式二,不必覆盖PostNCDestroy函数,因为对象会自动删除。
某函数{
CModDlg mod;
int r=mod.DoModle();//此时r的值即为n的具体值。所以,调用EndDialog时,把当时的相关按钮ID传过去,是最科学的。
}
第一步:在资源编辑器中创建对话框模板,添加控件;属性设置中,对话框的style不能是child,一定要是popup,否则出现子编辑控件无法获取焦点问题;
第二步:右键-classward-添加类名-添加控件的变量-编辑有关函数代码;
1.注意,不要覆盖PostNCDestroy(){delete this;},因模态对话框的创建过程是:
某函数{CModDlg mod;
mod.DoModle();
}
对话框关闭后,窗口销毁,调用上面PostNCDestroy(){delete this;},然后函数执行完毕,mod消失,相当于delete mod;同一对象,删除的两次,故崩溃。
2.若想创建非模态的,涉及style类型的变化,child或popup,这两个参数影响movewindow()的最终显示效果;
(1)创建:
主框架窗口类中:{protected:
CDlg* m_pmydlg;//利用向导添加变量,方式一
CDlg m_mydlg;//利用向导添加变量,方式二
};
(2)类的定义:
如采用方式一创建,一定要覆盖PostNCDestroy()并设置{delete this;};如采用方式二,不必覆盖PostNCDestroy函数,因为对象会自动删除。
第三步:编辑对话框的响应代码
主要是EndDialog(n)中n的取值问题。类定义的时候,不同的按钮,可能都会EndDialog,但在类体外,创建对象且返回时,并不知道哪个按钮被点击了,故借助这个n通讯。如上面的“某函数”,就可以这样设置某函数{
CModDlg mod;
int r=mod.DoModle();//此时r的值即为n的具体值。所以,调用EndDialog时,把当时的相关按钮ID传过去,是最科学的。
}
本文介绍了在MFC中如何创建和使用模态对话框,强调了对话框模板的style设置必须为popup以避免子控件焦点问题。步骤包括在资源编辑器中创建对话框,添加控件和类变量,以及编辑响应代码。同时提醒注意不要覆盖PostNCDestroy函数,并讨论了非模态对话框与style类型的关系。
519

被折叠的 条评论
为什么被折叠?



