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

时间:2009-09-05 07:03:43

标签: file visual-c++ mfc

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

3 个答案:

答案 0 :(得分:4)

您可以处理更新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 );
}

答案 1 :(得分:1)

使用您自己的功能覆盖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 );

    }


}

答案 2 :(得分:-1)

使用相应的菜单项调用CMenu::EnableMenuItem,并使用MF_DISABLED作为第二个参数。这是documentation