我有两个菜单项。禁用项目1时,我也希望禁用项目2。在菜单项1的OnUpdate处理程序中,我尝试使用“t_pMenu = pCmdUI-> m_pMenu;”,“t_pMenu = pCmdUI-> m_pSubMenu;”和“t_pMenu = pCmdUI-> m_pParentMenu;”但我总是得到NULL 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)
{
...
}
答案 0 :(得分:0)
永远不要在一个处理程序中处理不同的命令ID。 如果有按钮和菜单项,则会多次调用每个处理程序。你也不知道序列。当您更改Item1处理程序中的item2时,可以在稍后调用Item2的处理程序时再次启用它。
当你有一个名为m_bShowMenuItem1的标志时,只需使用它。
void CDummyView::OnUpdateMenuItem1(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bShowMenuItem1);
}
void CDummyView::OnUpdateMenuItem2(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bShowMenuItem1);
}
答案 1 :(得分:0)
我明白了。以下是我试过的代码。两个标志变量m_bShowFeatures和m_bShowSmallFetures初始化为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()。我没想到。