程序退出时,非模态子对话框的delete以及子对话框下控件销毁的有关问题
程序退出时,非模态子对话框的delete以及子对话框上控件销毁的问题。
如题:
在MFC下,VS2005中,建立了一个基于对话框的应用程序。
该主对话框的子对话框为非模态形式。
1. 子对话框派生自CDialog,在主对话框中以非模态的形式创建
2. m_ListDevAll是子对话框中的一个控件
3. 设置断点,断点在CDialog::OnDestroy();
此时尚未调用 delete m_pDevDlg。但是各变量的状态是
m_pDevDlg 有效
m_pDevDlg.m_ListDevAll有效
m_pDevDlg.m_hWnd为空?
m_pDevDlg.m_ListDevAll.m_hWnd为空
问题:窗口对象对象对应的句柄何时变为空的?
------解决方案--------------------
m_pDevDlg.m_hWnd为空?
错了

------解决方案--------------------
不为空!!!
------解决方案--------------------
我觉得m_pDevDlg 有效没用,毕竟m_pDevDlg.m_hWnd已经为空了,那这个东东就无效了,再操作肯定会异常的吧
------解决方案--------------------
OnDestroy表明已经调用了DestroyWindow函数,句柄已经变成 NULL 了。
窗口在销毁时,会先销毁子窗口,然后自毁。
如题:
在MFC下,VS2005中,建立了一个基于对话框的应用程序。
该主对话框的子对话框为非模态形式。
1. 子对话框派生自CDialog,在主对话框中以非模态的形式创建
2. m_ListDevAll是子对话框中的一个控件
3. 设置断点,断点在CDialog::OnDestroy();
此时尚未调用 delete m_pDevDlg。但是各变量的状态是
m_pDevDlg 有效
m_pDevDlg.m_ListDevAll有效
m_pDevDlg.m_hWnd为空?
m_pDevDlg.m_ListDevAll.m_hWnd为空
问题:窗口对象对象对应的句柄何时变为空的?
// MFC TestDlg.h : header file
CDevDlg *m_pDevDlg; //非模态子对话框的定义
// DevDlg.cpp : implementation file
CListCtrl m_ListDevAll;
// MFC TestDlg.cpp : implementation file
void CMFCTestDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
}
mfc
delete
子对话框句柄
------解决方案--------------------
m_pDevDlg.m_hWnd为空?
错了
------解决方案--------------------
不为空!!!
------解决方案--------------------
我觉得m_pDevDlg 有效没用,毕竟m_pDevDlg.m_hWnd已经为空了,那这个东东就无效了,再操作肯定会异常的吧
------解决方案--------------------
OnDestroy表明已经调用了DestroyWindow函数,句柄已经变成 NULL 了。
窗口在销毁时,会先销毁子窗口,然后自毁。