非模态对话框是通过new创建的对话框,语法类似于
Dialog* dialog = new Dialog(parameter);
这样创建的对话框时在堆上生成的,释放时要用delete
非模态对话框默认的OnClose只是把对话框隐藏了,并没有关闭。
如果仅仅是Delete指针的话会有内存泄露,因为对话框的资源没有释放。
如果在对话框内释放的话要重写两个消息响应函数
OnClose()和 PostNcDestory()
添加WM_ON_CLOSE()和 WM_ON_NCDESTORY()分别响应
WM_CLOSE 和 WM_NCDESTORY消息。
OnClose()
{
CDialg::OnClose();
DestoryWindow();
}
PostNcDestory()
{
CDialg::PostNcDestory();
delete this;
}
执行顺序,先执行OnClose()再执行 PostNcDestory()
如果在对话框外释放,就先调用DestoryWindow(),再delete该指针 。
示例 dialog->DestoryWindow();
delete dialog;
dialog = NULL;
(如有疏漏,欢迎指正)