问题描述:
单文档程序,界面中加入了一个基于CFromView的对话框,给单文档添加了OnClose(),在其中进行一些保存提示和关闭整个程序的代码。
但是在release版本下,尝试了各种结束程序的办法,都不成功,有的窗口关了但进程还在cpu占用马上达到99%,有的显示0x00407377指令引用的“0x000000020”内存。该内存不能为“Read”。等等。请问:
在单文档的OnClose()中,怎样才能关闭整个应用程序?
在OnDestroy()中,是否可以同样完成关闭?

解决方案 »

  1.   

    OnClose()和OnDestroy()都是响应消息的地方,运行到这里表示该窗口正在关闭过程中,你应该做的是处理一些资源释放或者数据保存的工作,不知道你做了什么“关闭整个程序”的东西?看看代码再说。
    当然,由于OnClose默认调用DestroyWindow来销毁窗口,如果你判断不想关闭,不调用CWnd::OnClose()直接返回,窗口就不会关闭,所以这里也是处理“是否关闭/退出”信息的地方。
      

  2.   

    楼上你好,
    void CMainFrame::OnClose() 
    {
    // TODO: Add your message handler code here and/or call default
    if(m_pInfoView->m_EChan)
    {
    MessageBox("当前记录已经改变,请注意保存~","提示",MB_OK|MB_ICONINFORMATION);
            m_pInfoView->m_EChan = FALSE;
    return;
    }
    if(m_pInfoView->m_TChan)
    {
    MessageBox("当前标题已经改变,请注意保存~","提示",MB_OK|MB_ICONINFORMATION);
            m_pInfoView->m_TChan = FALSE;
    return;
    }
    //AfxGetMainWnd()->PostMessage(WM_QUIT); 
    //ExitProcess(0);
    CFrameWnd::OnClose();
    }void CMainFrame::OnDestroy() 
    {
    CFrameWnd::OnDestroy();
    //GetParent()->SendMessage(WM_CLOSE);
    //PostMessage(WM_COMMAND,ID_FILE_CLOSE);
    PostMessage(WM_QUIT,0,0);
        //ExitProcess(0);
    //AfxGetMainWnd()->PostMessage(WM_QUIT);
    // TODO: Add your message handler code here

    }
      

  3.   

    //PostMessage(WM_QUIT,0,0); 
      

  4.   

    void CMainFrame::OnDestroy() 

    CFrameWnd::OnDestroy(); // TODO: Add your message handler code here 
    }
      

  5.   

    楼上你好,你的意思是OnDestroy()中什么都不加?
      

  6.   

    OnClose里面已经做了你的处理,OnDestroy就不需要额外做什么了,让它自己退出