如:
CDialog * preWnd =(CDialog*)CWnd::FromHandle(m_hPreWnd);
我通过一个窗口句柄hPreWnd获得了该窗口的指针,我怎样才能通此指针才能将该窗口所占用的资源释放掉呢?
注:该窗口是在前面用 new 来创建的!

解决方案 »

  1.   

    既然知道了窗口的句柄 m_hPreWnd, 那用 ::DestroyWindow(m_hPreWnd) 哦.
      

  2.   

    DestroyWindow()这个是系统自动调用的吧
      

  3.   

    我用了::DestroyWindow(m_hPreWnd)
    来释放句柄,但内存却没有减少
    程序片段如下:
    //创建窗口对象
    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;
    }
    }
      

  4.   

    在试了一下, 楼上的 code 在 VS2005 中没有内存泄漏.
    不过, 释放资源也不用写那么复杂, 用下面的即可:
    if(m_hPreWnd!=NULL)
    {
    CDialog * preWnd =(CDialog*)CWnd::FromHandle(m_hPreWnd);
    if(preWnd!=NULL&& preWnd->GetSafeHwnd())
    {
    ::DestroyWindow(m_hPreWnd);
    delete preWnd;
    }
    }
    如果这样, 楼主的程序仍有内存泄漏,估计是别的地方引起的吧.
      

  5.   

    我之所以要这样做,是因为我要关闭该句柄所对应的窗口,在关闭了该窗口以后,再释放该窗口所占用的资源!我发现通过这种方式做,资源却没有真正被释放!请问,还有别的什么办法呀!正如楼上所言,我没有在别的任何地方new过对象,在别的地方应该不存在内存泄漏的呀!