2010.7.29 模式对话框

为什么点击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,是没有释放的。

posted @ 2010-07-29 22:43  pjh123  阅读(122)  评论(0)    收藏  举报