我在对话框里加了一个treectrl;希望右健点击树的某个结点时弹出菜单,对菜单的某个子项(子项名为“常用”相应函数为OnEditFreqshow和OnUpdateEditFreqshow)设置checked选择,选择时打勾。
程序中对话框类CDlog,树的类为CWizardTreevoid CWizardTempTree::OnEditFreqshow()

        UpdateData( TRUE ) ;
HTREEITEM hSelItem = GetSelectedItem() ;
if( ! hSelItem )
{
return ;
}
 ……
 if(……)
   m_bCheckMark = FALSE;
 else if(……)
   m_bCheckMark = TRUE;
}
void CWizardTree::OnUpdateEditFreqshow(CCmdUI *pCmdUI)
{
if(m_bCheckMark)
{
cMenu.CheckMenuItem(ID_EDIT_FREQSHOW,MF_CHECKED);
}
else
{
cMenu.CheckMenuItem(ID_EDIT_FREQSHOW,MF_UNCHECKED);
}
return;
}现在运行时开始右键点击树的某个结点后选择“常用”,反复选两次小勾才会正常选择和取消,还有所有结点小勾的选择状态相一致,即某个结点选勾所有的都有小勾,不选了所有的都没有。
折腾了两天了,查了好多资料还是搞不定,请大家帮忙。

解决方案 »

  1.   

    在OnUpdateEditFreqshow中:
    pCmdUI->SetCheck(m_bCheckMark);
      

  2.   

    对话框菜单中pCmdUI->SetCheck(m_bCheckMark);是不起作用的
      

  3.   

    To   xdlous(虾米螺丝) 这个命令好像不行啊
      

  4.   

    To yjgx007正在研究   
        
    能不能说得具体些?!
      

  5.   

    void CWizardTree::OnUpdateEditFreqshow(CCmdUI *pCmdUI)
    {
    if(m_bCheckMark)
    {
    cMenu.CheckMenuItem(ID_EDIT_FREQSHOW,MF_CHECKED);
    }
    else
    {
    cMenu.CheckMenuItem(ID_EDIT_FREQSHOW,MF_UNCHECKED);
    }
    return;
    }
    能不全部打勾吗??至于两次来说,那是因为
    void CWizardTempTree::OnEditFreqshow()

            UpdateData( TRUE ) ;
    HTREEITEM hSelItem = GetSelectedItem() ;
    if( ! hSelItem )
    {
    return ;
    }
     ……
     if(……)
       m_bCheckMark = FALSE;
     else if(……)
       m_bCheckMark = TRUE;
    }
    第一次是先Update再执行
    if(……)
       m_bCheckMark = FALSE;
     else if(……)
       m_bCheckMark = TRUE;
    等到第二次点的时候:
    Update到上一次的操作.
      

  6.   

    CMenu menu;
    menu.LoadMenu(IDR_MYMENU);
    CMenu* pSubMenu = menu.GetSubMenu(0);
    pSubMenu->CheckMenuItem(ID_EDIT_FREQSHOW,m_bCheckMark ? MF_CHECKED : MF_UNCHECKED);TrackPopupMenuEx(pSubMenu, ....);
      

  7.   

    定义一个标志变量如果这个小勾是互斥的,比如int Sign;
    Update的时候用pCmdUI->SetCheck(Sign==XX)
    如果在其他函数中改变Sign,并且想在该函数没有退出之前就更新则要使用UpdateDialogControls(this,flase);
    没时间看你的详细代码~就这样掠过~望见晾
      

  8.   

    To high2003376320呵呵,调试时就是这样
    问题是怎么修改?!
      

  9.   

    to yjgx007不能这样,不然所有树结点打勾状态一样
      

  10.   


    to yjgx007不能这样,不然所有树结点打勾状态一样===============================What do you mean?
      

  11.   

    呵呵,搞定了,给分,感谢yjgx007,感谢大家!!Orz~~