File MFC:在SDI应用程序中禁用新文件和保存文件功能

File MFC:在SDI应用程序中禁用新文件和保存文件功能,file,visual-c++,mfc,File,Visual C++,Mfc,在代码中使用命令以编程方式禁用应用程序中的这两个功能,最简单的方法是什么?提前感谢。使用适当的菜单项和MF\u DISABLED作为第二个参数调用CMenu::EnableMenuItem。以下是。您可以处理更新UI消息: ON_UPDATE_COMMAND_UI(ID_FILE_NEW, OnUpdateFileNew) ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave) ... void CMainFrame::OnUpdateFil

在代码中使用命令以编程方式禁用应用程序中的这两个功能,最简单的方法是什么?提前感谢。

使用适当的菜单项和
MF\u DISABLED
作为第二个参数调用
CMenu::EnableMenuItem
。以下是。

您可以处理更新UI消息:

ON_UPDATE_COMMAND_UI(ID_FILE_NEW, OnUpdateFileNew)
ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave)

...

void CMainFrame::OnUpdateFileNew(CCmdUI *pCmdUI)
{
    pCmdUI->Enable( FALSE );
}

void CMainFrame::OnUpdateFileSave(CCmdUI *pCmdUI)
{
    pCmdUI->Enable( FALSE );
}

使用您自己的函数覆盖
CWinApp::OnFileNew
,如下所示

BEGIN_MESSAGE_MAP(CMyApp, CWinApp)
    ON_COMMAND(ID_APP_ABOUT, &CMyApp::OnAppAbout)
    // Standard file based document commands
    **//ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)**
    ON_COMMAND(ID_FILE_NEW, &CMyApp::OnFileNew)
    ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen)
    // Standard print setup command
    ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()


void CMyApp::OnFileNew()
{
         //Create a static member variable to hold the state. For the first time create a docment. From next time avoid calling CWinApp::OnFileNew();
    if( m_bDocCreated == FALSE )
    {
        CString strMsg;
        strMsg.Format( L"Create New DOC" );
        AfxMessageBox( strMsg );

        CWinApp::OnFileNew();
        m_bDocCreated = TRUE;
    }
    else
    {
        CFrameWnd* pFrame = (CFrameWnd*)AfxGetMainWnd();
        CMyDoc* pDoc = (CMyDoc*)pFrame->GetActiveDocument();
        CString strMsg;
        strMsg.Format( L"Doc ID = %ld",pDoc->m_lIndex );
        AfxMessageBox( strMsg );

    }


}
好的,修复了这个错误(应该在从现有项目复制代码后正确阅读代码!)