我是菜鸟之王,请问怎样处理WM_CLOSE消息,以提示用户是否退出?
我是这样处理的,怎么老是说Jump to Lable...

解决方案 »

  1.   

    在class view 中,右键点击应用程序主框架对象,选add windows message handle,
    添加WM_CLOSE,再添加:
    afxmessage("你马上要退出本程序");
      

  2.   

    如果是对话框程序,Ctrl+W打开类向导,对对话框添加WM_CLOSE函数(双击消息名,生成函数)
    如果是SDI程序,Ctrl+W打开类向导,对CMainFrame类添加WM_CLOSE函数(双击消息名,生成函数)
    然后在OnClose()中写你的代码:
    int a=AfxMessageBox("你已经新建或修改了文档,请先保存!",MB_YESNOCANCEL|MB_ICONQUESTION);
    if(a==IDCANCEL)//如果选择取消则去掉这个询问对话框,返回程序
    return;
    if(a==IDYES)//如果选择"是",则先执行你的程序,再退出
    {

    //这里写你的处理函数
    }如果选择了"否",则直接退出,不作任何操作,即什么也不执行
    CFrameWnd::OnClose();
      

  3.   

    Jump to Lable...
    肯定是因为你在case里边申明了变量,在case之后,break之前,加一对大括号就行了!
      

  4.   

    映射WM_CLOSE消息,然后在函数里加:afxmessage("!!!!!?",MB_YESNO);这函数,
      

  5.   

    如jun_01所说,我原来是这样的:
    case WM_CLOSE:
    int iRet = MessageBox (hwnd, "你要结束吗", "AppName", MB_YESNOCANCEL);
    if (iRet != IDTES)
    return 0;
    break ;
    后改成:
    case WM_CLOSE:
    {
    int iRet = MessageBox (hwnd, "你要结束吗", "AppName", MB_YESNOCANCEL);
    if (iRet != IDTES)
    return 0;
    }
    break ;就行了,为什么要把iRet的作范围限制在大括号里呢?
      

  6.   

    是因为我们先执行的是WM_CLOSE,然后你得写::DestroyWindow(hwndDlg);
    发送WM_DESTROY,然后你在这个里面写PostQuitMessage(0),这时发出了WM_QUIT
    然后对话框才能退出来
      

  7.   

    响应WM_CLOSE消息在消息响应函数中加入
    if(ID_OK == ::MessageBox(NULL,_T("Are you sure"), _T("Exit"), MB_OKCANCEL))
    {
     CDialog::OnClose();
    }