单文档。
要求点击x时,可以选择“是否确定退出?”我应该添加什么消息句柄。
在:文件->退出。我又应该怎么写消息涵数。附:我的程序中已经添加了WM_DESTROY(window),我在OnDestroy()函数里添加return可不管用,程序已经关闭。我不知道在这之前已触发了什么函数。 于是我又添加了WM_CLOSE(window),我用断点发现点击x的触发顺序是WM_DESTROY->WM_COLSE,所以在OnClose()里添加return也不管用。
请教各位了!

解决方案 »

  1.   

    点击X时收到的是WM_SYSCOMMAND消息,wParam的值是SC_CLOSE
      

  2.   

    OnSysCommand()
    {
    case :SC_CLOSE
      // 在这里看看?
    return;
    }
      

  3.   

    在虚函数 OnSysCommand 中加入void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    if(nID == SC_CLOSE)
            {
                    if(MessageBox("Are You Sure?",NULL,MB_OKCANCEL)
                          == MB_CANCEL)
    return;
            }
            .......................
            .......................
    }点x的时候,窗口关闭是由 WM_SYSCOMMAND 发出的。
    ===========================================================
    天天好精神!
      

  4.   

    同意:
    在虚函数 OnSysCommand 中加入void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    if(nID == SC_CLOSE)
            {
                    if(MessageBox("Are You Sure?",NULL,MB_OKCANCEL)
                          == MB_CANCEL)
    return;
            }
            .......................
            .......................
    }点x的时候,窗口关闭是由 WM_SYSCOMMAND 发出的。
      

  5.   

    各位大哥说的都一样,我想应该没错。
    奇怪的是:我加入了
    void CDrawPictView::OnSysCommand(UINT nID, LPARAM lParam) 
    {
    if(nID == SC_CLOSE)
    return;
    CScrollView::OnSysCommand(nID, lParam);
    }
    照理说程序应该是关闭不了的。可是照关不误。而且设置断点时,发现运行到这时提示:The program 'E:\DrawPict\DrawPict\Debug\DrawPict.exe' has exited with code 0 (0x0).
      

  6.   

    void CMainFrame::OnClose() 
    {
    // TODO: Add your message handler code here and/or call default
        DWORD  ret=0;
    ret =::AfxMessageBox("Are you sure?",MB_YESNO,0);
    if (ret==MB_OK) 
    {
    CFrameWnd::OnClose();
    }
    }
    在MainFrame中响应WM_CLOSE消息。
      

  7.   

    在主窗口的事件处理程序里处理试试,看你的程序好像是在VIEW里处理的。。
      

  8.   

    studentforever的方法是管用的。但不是MB_OK,是IDOK。
    可为什么前面几位大哥的方法不行呢?我已经知道怎么用了,可我想知道为什么?
    总结完毕,我会马上给分的。
      

  9.   

    重载CDocument::CanCloseFrame()函数。你可以在函数中做你要做的事情,如:询问是否可以关闭。返回false时,就不能关闭程序。返回true,就关闭程序
      

  10.   

    void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
    {
      if (nID == SC_CLOSE)
      {
        if (AfxMessageBox("Do you want to quit?", MB_YESNO) == IDYES)
          CFrameWnd::OnSysCommand(nID, lParam);
      }
      else
        CFrameWnd::OnSysCommand(nID, lParam);
    }