我创建了一个基于Dialog的程序,同时也加了菜单,
程序要执行一些很费时间的工作,为了防止用户误操作,
用 update_command_ui 禁止和恢复菜单,但有一个小问题,
禁止菜单后,菜单的并不变灰!不知道怎么回事!
void CHorsemanDlg::OnUpdateNewSniff(CCmdUI* pCmdUI) 
{
if(m_bWorking)
{
pCmdUI->Enable(0);
}else
{
pCmdUI->Enable(0);
}

}再就是,工作执行完之后,自然要恢复菜单,用户可以进行其他的
操作, 我的想法是调用 OnUpdateNewSniff()函数,不过这个函数
要传入 pCmdUI参数,比较麻烦,大家有什么好的办法?

解决方案 »

  1.   

    你自己看看这样对吗?那还要 if ....else....有什么用啊??         if(m_bWorking)
    {
    pCmdUI->Enable(0);
    }else
    {
    pCmdUI->Enable(0);
    }
      

  2.   

    不好意思,笔误应该是pCmdUI->Enable(m_bWorking);不过 恢复菜单的问题依旧没有解决
      

  3.   

    跟踪看一下m_bWorking的值在菜单操作以后有没有变化!
      

  4.   

    在你的参数m_bWorking每次改变的后面增加菜单刷新语句:CMenu oMainMenu;
    oMainMenu.LoadMenu(IDR_MAINFRAME);
    CMenu* pDataMenu = oMainMenu.GetSubMenu(1);//取得要刷新子菜单所在的菜单指针;
    ::SendMessage(AfxGetMainWnd()->m_hWnd, WM_INITMENUPOPUP, int(pDataMenu->m_hMenu), FALSE);这样能确保刷新,而且不需要传CCmdUI* pCmdUI参数,还比较方便,你试试看吧