我在对话框里加了一个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;
}现在运行时开始右键点击树的某个结点后选择“常用”,反复选两次小勾才会正常选择和取消,还有所有结点小勾的选择状态相一致,即某个结点选勾所有的都有小勾,不选了所有的都没有。
折腾了两天了,查了好多资料还是搞不定,请大家帮忙。
程序中对话框类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;
}现在运行时开始右键点击树的某个结点后选择“常用”,反复选两次小勾才会正常选择和取消,还有所有结点小勾的选择状态相一致,即某个结点选勾所有的都有小勾,不选了所有的都没有。
折腾了两天了,查了好多资料还是搞不定,请大家帮忙。
解决方案 »
- 正则表达式哪个库好?
- 请问VC能制作网页吗?如何制作 郁闷,刚注册的帐号说不让给分,过2天补上
- Access数据库保存“长二进制数据”问题
- 用SOCKET传输文件,为什么到file.read(pBuf,iSize)就跳了出来?
- Tree控件?
- 200分求一个驱动程序,谁能提供该驱动,马上给分!分不够还可商量,但不能超过400分,因为我一共才400分!
- VC中如何调用 ocx
- 使用MFC的AfxBeginThread()创建线程没有实例怎么解决?
- 求助:BoundsChecker:Allocation Conflict问题。(exe调用dll)
- 请教:如何自学上位机软件开发
- 读取实时更新的dbf
- 再问经验:功能重现
pCmdUI->SetCheck(m_bCheckMark);
能不能说得具体些?!
{
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到上一次的操作.
menu.LoadMenu(IDR_MYMENU);
CMenu* pSubMenu = menu.GetSubMenu(0);
pSubMenu->CheckMenuItem(ID_EDIT_FREQSHOW,m_bCheckMark ? MF_CHECKED : MF_UNCHECKED);TrackPopupMenuEx(pSubMenu, ....);
Update的时候用pCmdUI->SetCheck(Sign==XX)
如果在其他函数中改变Sign,并且想在该函数没有退出之前就更新则要使用UpdateDialogControls(this,flase);
没时间看你的详细代码~就这样掠过~望见晾
问题是怎么修改?!
to yjgx007不能这样,不然所有树结点打勾状态一样===============================What do you mean?