【发布时间】:2011-08-11 00:55:28
【问题描述】:
在代码中使用命令以编程方式禁用应用程序中这两个功能的最简单方法是什么?提前致谢。
【问题讨论】:
标签: file visual-c++ mfc
在代码中使用命令以编程方式禁用应用程序中这两个功能的最简单方法是什么?提前致谢。
【问题讨论】:
标签: file visual-c++ mfc
您可以处理更新 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 );
}
}
【讨论】:
使用适当的菜单项调用CMenu::EnableMenuItem,并将MF_DISABLED 作为第二个参数。这是documentation。
【讨论】: