请教,VC6,单文档和多文档的程序中右上角的关闭按钮如何变灰掉。不是隐藏,只是变灰。最小和恢复按钮还是可以用的。总共这3个按钮,其中一个变灰。请教下有几种方法,如何添加代码

解决方案 »

  1.   

    在初始化函数中添加:
    //获得系统菜单
    CMenu *pMenu = GetSystemMenu(FALSE);
    //获得关闭按钮ID
    int x = pMenu->GetMenuItemCount();
    UNIT pID = pMenu->GetMenuItemID(x-1);
    //使关闭按钮无效
    pMenu->EnableMenuItem(PID , MF_DISABLED);
      

  2.   

    顺道问下,我知道在基于对话框的程序中关闭程序触发事件的顺序是
    OnClose()-->PostQuitMessage()--->OnDestry(),在onclose中可以拦截提示是否保存。但是在单文档或者多文档中,没有onclose事件,请教下,该如何处理才可以提示他保存,在OnDestry()中这样做肯定不行,窗口已经关闭了
      

  3.   

    MainFrame里面加OnClose 事件。
      

  4.   

    CMainFrame类的OnCreate中加入
    CMenu* pMenu = GetSystemMenu(FALSE);
    if(pMenu)
    {
    pMenu->EnableMenuItem(SC_CLOSE, MF_GRAYED | MF_DISABLED);
    }
      

  5.   

    在~Doc.cpp中加这段代码试试看吧BOOL CEditTestDoc::CanCloseFrame(CFrameWnd* pFrame) 
    {
    if( p_EditBox->GetModify() ) //检查修改标志
    {
    int t;
    t=::MessageBox(NULL,"编辑的文字已经改变,要存盘吗?",_T("警告"),MB_YESNOCANCEL | MB_ICONWARNING);
    if( t==IDCANCEL ) //取消
    return false;
    if( t==IDYES ) //保存
    {
    CString pathName = p_EditBox->GetPathName();
    if( pathName.IsEmpty() ) //没有文件打开
    {
    CString sFilter = _T("文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||");  //限定文件类型
    CFileDialog Dialog( false, _T("txt"), NULL,
    OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, (LPCTSTR)sFilter,NULL );//定制保存文件对话框
    if( Dialog.DoModal() == IDOK )  //弹出保存文件对话框
    {
    pathName = Dialog.GetPathName();
    p_EditBox->SaveFile( pathName ); //保存文件
    }
    }
    else
    p_EditBox->SaveFile( pathName );
    }
    }

    return CDocument::CanCloseFrame(pFrame);
    }
    需要的地方自己改下
    CanCloseFrame这是重写的事件哦!
      

  6.   

    这段代码知识给你借鉴下的,很多地方你要自己写,是重写CanCloseFrame实现的!