Mfc 如何在菜单项1的OnUpdate处理程序中启用/禁用菜单项2?

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) {

我有两个菜单项。当项目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)
    {
        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*内容