Mfc 如何在菜单项1的OnUpdate处理程序中启用/禁用菜单项2?
我有两个菜单项。当项目1被禁用时,我希望项目2也被禁用。在菜单项1的OnUpdate处理程序中,我尝试使用t_pMenu=pCmdUI->m_pMenu;,t_pMenu=pCmdUI->m_psubmen;和t_pMenu=pCmdUI->m_pParentMenu;但我总是得到空t_pMenu。我怎样才能达到这个目的Mfc 如何在菜单项1的OnUpdate处理程序中启用/禁用菜单项2?,mfc,Mfc,我有两个菜单项。当项目1被禁用时,我希望项目2也被禁用。在菜单项1的OnUpdate处理程序中,我尝试使用t_pMenu=pCmdUI->m_pMenu;,t_pMenu=pCmdUI->m_psubmen;和t_pMenu=pCmdUI->m_pParentMenu;但我总是得到空t_pMenu。我怎样才能达到这个目的 void CDummyView::OnUpdateMenuItem1(CCmdUI* pCmdUI) { if(m_bShowMenuItem1) {
void CDummyView::OnUpdateMenuItem1(CCmdUI* pCmdUI)
{
if(m_bShowMenuItem1)
{
pCmdUI->SetText("Hide Features")
CMenu * t_pMenu = pCmdUI->m_pSubMenu;
if(t_pMenu != NULL)
t_pMenu->EnableMenuItem(ID_MENU_ITEM2, MF_ENABLED);
}
else
{
pCmdUI->SetText("Show Features")
CMenu * t_pMenu = pCmdUI->m_pParentMenu;
if(t_pMenu != NULL)
t_pMenu->EnableMenuItem(ID_MENU_ITEM2, MF_GRAYED);
}
}
void CDummyView::OnUpdateMenuItem2(CCmdUI* pCmdUI)
{
...
}
不要在一个处理程序中处理不同的命令ID。 如果有按钮和菜单项,则会多次调用每个处理程序。你也不知道顺序。在Item1处理程序中更改item2时,稍后调用item2的处理程序时,可能会再次启用它 当您有一个名为m_bShowMenuItem1的标志时,只需使用它
void CDummyView::OnUpdateMenuItem1(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bShowMenuItem1);
}
void CDummyView::OnUpdateMenuItem2(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bShowMenuItem1);
}
我成功了。下面是我试过的代码。两个标志变量m_bShowFeatures和m_BShowSmallFeatures被初始化为TRUE
void CDummyView::OnMenuItem1()
{
m_bShowFeatures = !m_bShowFeatures;
m_pDoc->UpdateAllViews(NULL, SHOW_HIDE_ALL_FEATURES);
}
void CDummyView::OnUpdateMenuItem1(CCmdUI* pCmdUI)
{
if(m_bShowFeatures)
pCmdUI->SetText("Hide Features")
else
pCmdUI->SetText("Show Features")
}
void CDummyView::OnMenuItem2()
{
m_bShowSmallFetures= !m_bShowSmallFetures;
m_pDoc->UpdateAllViews(NULL, SHOW_HIDE_SMALL_FEATURES);
}
void CDummyView::OnUpdateMenuItem2(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bShowFetures)
if(m_bShowSmallFetures)
pCmdUI->SetText("Hide Small Features")
else
pCmdUI->SetText("Show Small Features")
}
因此,在单击菜单项1时调用OnMenuItem1之后,OnUpdateMenuItem2确实会被调用。我没想到。添加pCmdUI->Enablem\u bShowMenuItem1;到OnUpdateMenuItem2,并从OnUpdateMenuItem1中删除所有CMenu*内容