在代码中使用命令以编程方式禁用应用程序中的这两个功能最简单的方法是什么?提前谢谢。
答案 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。