在MainFrame的OnClose里进行判断。

解决方案 »

  1.   

    利用WINDOWS的消息循环机制,拦截关闭窗口消息!就可以控制窗口的关闭了!!!
      

  2.   

    可以通过处理WM_SYSCOMMAND实现.
    void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
    {
    if((nID & 0xFFFFFFF0)== SC_CLOSE){
          if(AfxMessageBox("您现在是否决定要退出程序!",MB_OKCANCEL)!=IDOK)
    return;
    }
    CWnd::OnSysCommand(nID,lParam);
    }
      

  3.   

    请到http://www.etechbase.net/advsearch.php,将你这个问题输入到检索框,然后选择准确匹配查询,应该可以帮助你解决这个问题的。
      

  4.   

    在OnClose中是能解决该问题,但好像找不到WM_SYSCOMMAND消息.
      

  5.   

    重载MFC的WM_CLOSE消息,其虚函数就是OnClose(),窗口的关闭触发这个消息,你可以在这个函数中做所有你上面说到你想要的事情。
      

  6.   

    消息循环机制是WINDOWS系统自己处理的,可以自己实现,但是我觉得你的程序应该不用自己实现一个消息循环吧,。
      

  7.   

    to freeclick :
    这个我已经实现了,只是没找到liyangg的void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam),不懂得就在问一下,下午给分。
      

  8.   

    OnSysCommand在wizard里是没有的。要自己手工添。
    ON_MESSAGE(WM_SYSCOMMAND, OnSysCommand)afx_msg UINT OnSysCommand(WPARAM ,LPARAM)
    WPARAM LPARAM的含义,看MSDN关于WM_SYSCOMMAND一节
      

  9.   

    最简单的的办法,如果是一个对话框结构的,给cancel钮加消息处理,一切搞定,一定要叫OnCancel(),把CDialog::Oncancel()注释掉,想退出再执行,其实是一个虚函数。若不是dialog ,就处理WM_CLOSE,还有,注意防止用户注销或者关机,所以重载OnQueryEndSession(),
      

  10.   

    关于OnSysCommand:
    手工添当然也可以,只是能点烦了。
    在Class View(左边那三个属性页中显示class的那个)里面右键点击对话框类,在菜单中选Add Windows Message Handler,弹出的对话框右下角有个复合框,它指定filter class,把它改为window,就可以在左边找到WM_SYSCOMMAND了。