在一个循环里使用以下代码
MSG msg;
for()
{
  if(PeekMessage(&msg,   0,   0,   0,   PM_REMOVE))   
  {
     TranslateMessage(&msg);  
      DispatchMessage(&msg);   
  }   if(this->m_hWnd!=0)
  {
     DoOtherThing();
  }}
当窗口消失的时候就会发生错误,跟踪下来是因为窗口已经不存在了, 而还在执行别的代码,  求助, 要怎么改, 试了好多种方法都不行 ,,要怎么才能使程序响应了WM_DESTROY ,以后就不再执行别的函数了呢? 

解决方案 »

  1.   

    每次使用窗口指针的时候 判断一下是否为空。要想destroy之后不执行其他代码,没有见过。。
      

  2.   

    在tranlate和dispatch之前,判断一下消息是不是wm_destroy
    还有,不是很明白你的“别的函数”是什么意思,这个别的函数在哪里呢,要具体问题具体分析
      

  3.   

    在wm_destroy里面里面postmessage(0) 吧
      

  4.   

    为什么MFC提供一个GetSafeHwnd()函数而不用,直接访问m_hWnd呢?
      if(IsWindow(GetSafeHwnd())) 
      { 
         DoOtherThing(); 
      } 
      

  5.   

    应该是你的代码没有退出死循环:
    MSG msg; 
    for() 

      if(PeekMessage(&msg,   0,   0,   0,   PM_REMOVE))    
      { 
         TranslateMessage(&msg);   
          DispatchMessage(&msg); 
          if(msg.message==WM_DESTROY) // <---这里退出
             break; 
      }    if(this->m_hWnd!=0) 
      { 
         DoOtherThing(); 
      } }