如:
CDialog * preWnd =(CDialog*)CWnd::FromHandle(m_hPreWnd);
我通过一个窗口句柄hPreWnd获得了该窗口的指针,我怎样才能通此指针才能将该窗口所占用的资源释放掉呢?
注:该窗口是在前面用 new 来创建的!
CDialog * preWnd =(CDialog*)CWnd::FromHandle(m_hPreWnd);
我通过一个窗口句柄hPreWnd获得了该窗口的指针,我怎样才能通此指针才能将该窗口所占用的资源释放掉呢?
注:该窗口是在前面用 new 来创建的!
来释放句柄,但内存却没有减少
程序片段如下:
//创建窗口对象
CTestDlg *dlg = new CTestDlg((CWnd*)m_hWnd); ASSERT_VALID(dlg);
dlg->Create(IDD_DIALOG2,GetMainView()); m_hPreWnd= dlg->GetSafeHwnd();//m_hPreWnd是全句的在另外的函数中用以下方法释放资源:
if(m_hPreWnd!=NULL)
{
CDialog * preWnd =(CDialog*)CWnd::FromHandle(m_hPreWnd);
if(preWnd!=NULL&& preWnd->GetSafeHwnd())
{
preWnd->ShowWindow(SW_HIDE);
preWnd->DestroyWindow();
//FreeResource(preWnd);
::DestroyWindow(m_hPreWnd);
delete preWnd;
}
}
不过, 释放资源也不用写那么复杂, 用下面的即可:
if(m_hPreWnd!=NULL)
{
CDialog * preWnd =(CDialog*)CWnd::FromHandle(m_hPreWnd);
if(preWnd!=NULL&& preWnd->GetSafeHwnd())
{
::DestroyWindow(m_hPreWnd);
delete preWnd;
}
}
如果这样, 楼主的程序仍有内存泄漏,估计是别的地方引起的吧.