在标准的Win32程序中,可以通过IsWindow(hWnd)来判断窗口是否存在。
在MFC程序中,可以通过CWnd::GetSafeHwnd()来获取窗口句柄,理论上可以使用IsWindow(wnd.GetSafeHwnd())来判断wnd对象是否存在。但是如果wnd对象已经释放,那么就无法调用wnd.GetSafeHwnd()函数,也就不能用IsWindow(wnd.GetSafeHwnd())来判断窗口对象是否关闭!请问,如何判断窗口(CWnd)对象是否存在?

解决方案 »

  1.   

    想办法得到他的窗口句柄,有窗口句柄才能判断窗口是否存在。可以在wnd对象释放的时候保留窗口句柄。
      

  2.   

    IsWindow(wnd.GetSafeHwnd())就可以,wnd窗口资源释放了,一样可以使用的,只要窗口类对象还在就行。
      

  3.   

    在CWnd的析构函数中会调用::DestroyWindow(m_hWnd)所以,如果CWnd类的对象释放了,窗口句柄也就释放了。也就不用判断窗口是否存在,因为不存在了。
      

  4.   


    您说的是正确的!我的程序是其它地方出了问题——后台工作线程和主界面线程同步出了点问题,开始时怀疑wnd窗口资源释放导致GetSafeHwnd()函数无法调用。刚才做了一个只有主界面线程的小程序做了测试发现我的怀疑是错误的!非常感谢!虽然并不是直接解决问题,但这个问题得到了澄清!