无模式对话框的销毁 我想清晰了解一下模式对话框和非模式对话框的详细销毁过程,最好有代码说明。谢谢各位。销毁对话框正确与否很重要,希望大家耐心解析下。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先销毁窗口句柄再delete掉窗口指针 http://blog.csdn.net/zdl1016/archive/2009/04/03/4046352.aspx 深入浅出MFC 该书有说明 1、void CPatienInfo::OnDestroy(){ CDialog::OnDestroy();}void CPatienInfo::OnNcDestroy(){ CDialog::OnNcDestroy();}void CPatienInfo::PostNcDestroy(){ CDialog::PostNcDestroy(); CSK4000Dlg *plg = NULL; plg = (CSK4000Dlg*)GetParent(); if(plg->plg_patient_info) { delete plg->plg_patient_info; plg->plg_patient_info = NULL; }}void CPatienInfo::OnClose(){ CDialog::OnClose(); CSK4000Dlg *plg = NULL; plg = (CSK4000Dlg*)GetParent(); if(plg->plg_patient_info) { delete plg->plg_patient_info; plg->plg_patient_info = NULL; }}以上代码调试结果:当我关闭子窗口对话框的时候,调试时显示 ,程序只调用了OnClose();当我关闭父窗口的时候,什么都没调用2、void CPatienInfo::OnDestroy(){ CDialog::OnDestroy();}void CPatienInfo::OnNcDestroy(){ CDialog::OnNcDestroy();}void CPatienInfo::PostNcDestroy(){ CDialog::PostNcDestroy(); CSK4000Dlg *plg = NULL; plg = (CSK4000Dlg*)GetParent(); if(plg->plg_patient_info) { delete plg->plg_patient_info; plg->plg_patient_info = NULL; }}void CPatienInfo::OnClose(){ CDialog::OnClose();//未执行窗口的销毁}以上代码显示:当关闭子窗口时,运行到OnClose()当关闭父窗口时,其他3个函数被调用。那么 这两种情况是不是表明:我的销毁只需要OnClose()函数就行了? 1.OnClose() 消息响应函数,响应窗口的WM_CLOSE消息,当关闭按钮被单击的时候发送此消息2.OnDestroy() 消息响应函数,响应窗口的WM_DESTROY消息,当一个窗口将被销毁时,发送此消息3.OnNcDestroy() 消息响应函数,响应窗口的WM_NCDESTROY消息,当一个窗口被销毁后发送此消息4.PostNcDestroy() 重载函数,作为处理OnNcDestroy()函数的最后动作,被CWnd调用 如何阻止窗口被“显示桌面”或WINDOWS+D命令隐藏? EMF文件的重新绘制并保存在磁盘文件中 请教有经验的网络编程高手!什么情况下错误不必要重新连接。 快疯掉了,请高手帮忙,郁闷中... 求助,如何取得CPU温度及风扇,请提供思路,谢谢!!!高分相送!! 又是关于Release和Debug的问题!(是在搞不定了,请指教!) SDK,如何为按钮添加位图? CStatic问题 高分求TXT文件内容处理问题 入门问题! mfc生成单文档怎样注册窗口类的 VC++调用动态链接库 函数指针声明
再delete掉窗口指针
该书有说明
void CPatienInfo::OnDestroy()
{
CDialog::OnDestroy();
}void CPatienInfo::OnNcDestroy()
{
CDialog::OnNcDestroy();
}
void CPatienInfo::PostNcDestroy()
{
CDialog::PostNcDestroy();
CSK4000Dlg *plg = NULL;
plg = (CSK4000Dlg*)GetParent();
if(plg->plg_patient_info)
{
delete plg->plg_patient_info;
plg->plg_patient_info = NULL;
}
}void CPatienInfo::OnClose()
{
CDialog::OnClose();
CSK4000Dlg *plg = NULL;
plg = (CSK4000Dlg*)GetParent();
if(plg->plg_patient_info)
{
delete plg->plg_patient_info;
plg->plg_patient_info = NULL;
}
}以上代码调试结果:
当我关闭子窗口对话框的时候,调试时显示 ,程序只调用了OnClose();
当我关闭父窗口的时候,什么都没调用
2、
void CPatienInfo::OnDestroy()
{
CDialog::OnDestroy();
}void CPatienInfo::OnNcDestroy()
{
CDialog::OnNcDestroy();
}
void CPatienInfo::PostNcDestroy()
{
CDialog::PostNcDestroy();
CSK4000Dlg *plg = NULL;
plg = (CSK4000Dlg*)GetParent();
if(plg->plg_patient_info)
{
delete plg->plg_patient_info;
plg->plg_patient_info = NULL;
}
}void CPatienInfo::OnClose()
{
CDialog::OnClose();//未执行窗口的销毁
}
以上代码显示:
当关闭子窗口时,运行到OnClose()
当关闭父窗口时,其他3个函数被调用。
那么 这两种情况是不是表明:我的销毁只需要OnClose()函数就行了?