界面里面create一个按钮,名字“退出”,响应exit(0);界面一开始全屏(只有视
图无框架的那种),按esc退出全屏,然后点击全屏再次进入全屏,这时点击“退出”,会经常出现内
存错误,也少数几次能正常退出。其他按钮按了却没有这个问题,试过debug和realse模式,无果;求教版友。谢谢~

解决方案 »

  1.   

    m_btn3.Create("退    出",WS_CHILD|WS_BORDER|WS_VISIBLE,CRect(630,399,726,439),this,IDC_EXIT);
    在view的oncreate里面创建的
      

  2.   

    对了,退出按钮响应函数就一句,exit(0),而内存报错也就是在这里出现的,说什么read 0x0000004地址出错,请高手帮我想想,能有什么情况产生这样的问题。谢谢了
      

  3.   

    不好意思,我懒了,现在把代码贴一下
    view里面退出按键的响应函数
     void CFullScreenView::OnExit()
     {
     exit(0);
     //PostQuitMessage(0);
     }frame框架的全屏函数
    void CMainFrame::OnViewFullScreen() 
    {
    if(m_bIsFull)
    {
    return;
    }
    m_bIsFull=TRUE; m_bViewTool=m_wndToolBar.IsWindowVisible();
    m_bViewStatus=m_wndStatusBar.IsWindowVisible();
    //记录要显示的视图当前位置
    CView *pView=this->GetActiveView();
    pView->LockWindowUpdate();
    pView->GetWindowPlacement(&m_plcView);
    pView->UnlockWindowUpdate(); //记录主框架的当前位置
    this->LockWindowUpdate();
    this->GetWindowPlacement(&m_plcWnd);
    this->UnlockWindowUpdate(); //隐藏工具栏和状态栏
    ShowControlBar(&m_wndToolBar,FALSE,FALSE);
    ShowControlBar(&m_wndStatusBar,FALSE,FALSE); //求得全屏大小
    ::SystemParametersInfo(SPI_GETWORKAREA,0,&m_rectDesktop,0);
    m_rectDesktop.right=::GetSystemMetrics(SM_CXSCREEN);
    m_rectDesktop.bottom=::GetSystemMetrics(SM_CYSCREEN);
    m_rectDesktop.right+=m_rectDesktop.left;
    m_rectDesktop.bottom+=m_rectDesktop.top; //计算以全屏为客户区时的窗体大小
    CRect rectHold=m_rectDesktop;
    ::AdjustWindowRect(&m_rectDesktop,this->GetStyle(),TRUE);
    m_rectDesktop.bottom+=::GetSystemMetrics(SM_CYBORDER);
    //设置主框架窗体位置和大小
    WINDOWPLACEMENT plcHold=m_plcView;
    plcHold.showCmd=SW_SHOWNORMAL;
    plcHold.rcNormalPosition=m_rectDesktop;
    this->LockWindowUpdate();
    this->SetWindowPlacement(&plcHold);
    this->UnlockWindowUpdate(); //设置客户区窗体的位置和大小
    plcHold.rcNormalPosition=rectHold;
    ::AdjustWindowRect(&(plcHold.rcNormalPosition),pView->GetStyle(),FALSE);
    pView->LockWindowUpdate();
    pView->SetWindowPlacement(&plcHold);
    pView->UnlockWindowUpdate();

    }
    view类里面按esc来响应下面的函数
    void CFullScreenView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    if(nChar==VK_ESCAPE)
    {
    ((CMainFrame*)AfxGetMainWnd())->EscapeFullScreen();
    return;
    }
    CView::OnChar(nChar, nRepCnt, nFlags);
    }退出全屏函数如下:
    void CMainFrame::EscapeFullScreen
    {
    if(!m_bIsFull)
    {
    return;
    }
    m_bIsFull=FALSE;
    //AfxMessageBox("escape");
      
    //恢复主窗体
    CView *pView=this->GetActiveView();
    pView->LockWindowUpdate();
    pView->SetWindowPlacement(&m_plcView);
    pView->UnlockWindowUpdate();
     
    //恢复主框架窗体
    LockWindowUpdate();
    SetWindowPlacement(&m_plcWnd);
    UnlockWindowUpdate();
    ShowControlBar(&m_wndToolBar,m_bViewTool,FALSE);
    ShowControlBar(&m_wndStatusBar,m_bViewStatus,FALSE); }执行顺序依次是OnViewFullScreen()、EscapeFullScreen、OnViewFullScreen(),这时按下退出键就出现问题。
    postquitmessage用了不出现问题,谢谢ls的回答~期待对exit的解释,多谢各位!