求问CMainFrame中的DestroyWindow函数执行完后,CMainFrame的对象指针是否变为NULL?
我测试的没有变成NULL,MSDN里面说CMainFrame执行完这个函数后会自动delete其指针.但是指针并没有变为NULL,请问这是怎么回事啊?应该怎么去改变这个指针为NULL呢?
我测试的没有变成NULL,MSDN里面说CMainFrame执行完这个函数后会自动delete其指针.但是指针并没有变为NULL,请问这是怎么回事啊?应该怎么去改变这个指针为NULL呢?
LZ可以做这样的测试:在程序中CDialog * pDlg = new CDialog();
delete pDlg;
if (NULL == pDlg)
{
AfxMessageBox("指针为空");
}
else
{
AfxMessageBox("指针不为空");
}
MainFrm也是对话框,所以没有什么特别的。
窗口的销毁,框架对象还没有销毁。
真正销毁框架对象的是在PostNcDestroy中
void CMainFrame::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
CFrameWnd::PostNcDestroy();//这个函数的执行代码就是 delete this
//LZ可以在这里单步跟踪一下,相信就明白了
}
CMainFrame执行完这个函数后会自动delete其指针,其实是一系列的动作
DestroyWindow结束后又会调用PostNcDestroy
我测试这段代码:
CDialog * pDlg = new CDialog();
delete pDlg;
if (NULL == pDlg)
{
AfxMessageBox("指针为空");
}
else
{
AfxMessageBox("指针不为空");
}指针还是原来的地址,可是hwnd变化了,由原来的0x00000000变成了0xfeeefeee
我怎么判断指针是否被delete了呢?
我现在做一个打印的程序。我在一单文档中弹出模态对话框,然后进行打印预览。我这里创建了新的CPrintFrame和CPrintView,这里我能调用单文档的打印预览的功能?我试了好象不行,可能是模态对话框的缘故。
我想响应对话框的OnDestory,在这里判断CPrintFrame的指针是否存在,如果存在则关闭CPrintFrame,如果不存在,则不处理。假如我CPrintFrame打印预览窗体关闭了。这时我怎么去判断呢?或者我没有打开打印预览窗体这时的CPrintFrame又是什么样子呢?
----------
响应关闭消息啊。WM_CLOSE。我没有打开打印预览窗体这时的CPrintFrame又是什么样子呢?
----------
既然打开也是你程序做的,打没打开你设个标志不就结了。
if ( ptr != NULL ) //是起不到检测作用的
delete pDlg;
pDlg = NULL;