为什么点击ONOK后,对话框上的控件资源会被删除?OnOK做了什么事儿?
假如有一个对话框Class CMyDialog
我在CMyDialog中,声明了一个m_button,然后在OnInitDlg()中create这个buttton,即m_button.create()
然后呢,声明对话框对象,显示对话框,如下:
CMyDialog m_dlg; //第一步
if(m_dlg.DoModal()==IDOK) //第二步
{
}
//此时,关键之处,我想做什么呢?
m_dlg.m_button.getcheck();//第三步 即取得dialog上button对象是否被选中,这样做是否可以呢?
答案:报错!
经调试,发现第一步中,m_button还是空的,
第二步中,m_button已经分配了内存空间;
第三步中,m_button已经释放!!!!
为什么会这样呢?因为对于模式对话框,DoModal之后,必须确定后,才能回到主程序,
这时候的确定,即OK按钮,实际上调用了CDialog::virtual void OnOK();
OnOK()在关闭、销毁了对话框之后,已经释放了m_button,虽然这时候m_dlg对象还存在,但是其中的控件资源已经没有了,所有第三步会报错!
值得注意的是,这时候,在m_dlg中,自己定义的变量,比如定义一个int i,是没有释放的。