CTreeCtrl遍历和checkBox使用及初始化时SetCheck无效解决办法
2012-10-10 14:55
477 查看
CTreeCtrl遍历某一节点以下的全部节点。
递归遍历方法:
//函数说明:返回值:与strId对应的节点.
参数: hItem 查找的起始节点, strId 待查找的数据的标识符,开始用SetItemData设置
ITEMDATA为自定义的数据结构
HTREEITEM CMyTree::TreeVisit(HTREEITEM hItem,const CString& strId)
{
//step1:检验开始节点.
ITEMDATA *pData=(ITEMDATA*) GetItemData( hItem );
if( pData )
{
if( pData->strID.Compare( strID ) == 0 )
return hItem;
}
//step1:检查子结点
HTREEITEM hChildItem= GetChildItem( hItem )
HTREEITEM hFindItem=NULL;
while( hChildItem )
{
hFindItem= TreeVisit(hChildItem , strId) ; //递归
if( hFindItem ) return hFindItem;
hChildItem= GetChildItem( hChildItem );
}
//step2: 检查兄弟结点
HTREEITEM hSlibItem= GetNextItem(hItem,TVGN_NEXT);
while( hSlibItem )
{
hFindItem= TreeVisit(hSlibItem , strId) ; //递归
if( hFindItem ) return hFindItem;
hChildItem= GetNextItem(hSlibItem,TVGN_NEXT);
}
return NULL; //不能少
}
响应CTreeCtrl中的CheckBox消息
添加CTreeCtrl的鼠标单击事件NM_CLICK
加入如下代码
CPoint pt;
UINT flag;
HTREEITEM hCurrentItem;
GetCursorPos(&pt);
ScreenToClient(&pt);
hCurrentItem = HitTest(pt, &flag);
if (flag & TVHT_ONITEMSTATEICON)//是点击CHECK框
{
// 检查CheckBox的状态,返回的是在点击之前的状态
// 意思就是得出来是TRUE,那么待会就会是FALSE
// 得出来是FALSE,那么待会就会是TRUE
// 你在下面进行你自己的处理就可以了
if (m_tree.GetCheck(hCurrentItem))
{
}
else
{
}
}
CTreeCtrl:实现子结点随父结点状态一致的方法: http://www.cnblogs.com/EverYoung/archive/2011/09/21/2184320.html
CTreeCtrl树控件初始化时SetCheck无效的解决办法
对于对话框中的TreeView控件,如果想在初始化(OnInitDialog)中SetCheck,必须:
m_tree.ModifyStyle( TVS_CHECKBOXES, 0 );
m_tree.ModifyStyle( 0, TVS_CHECKBOXES );
m_tree.SetCheck(hItem, TRUE);
即即使在对话框编辑器中为TreeView增加了Check Boxes属性,也必须重新设一次TVS_CHECKBOXES,SetCheck才能起作用
而对于非初始化中的SetCheck,则不受影响
相关文章推荐
- [置顶] MFC树形控件CTreeCtrl使用方法、遍历、SetCheck无效、根据名称获取节点、获取选中节点等问题
- HorizontalScrollView 初始化第一次时使用smoothScrollTo无效的解决办法
- Ubuntu 11.10 使用Gnome3 快捷键Alt+F2无效的解决办法
- 关于Qt使用QPalette设置Qwidget背景色无效的解决办法及分析
- Android CheckBox中设置padding无效解决办法
- 解决TreeView中使用JavaScript完成CheckBox全选的办法
- CComboBox使用SetWindowText()无效的解决办法
- Intellij IDEA 使用Spring-boot-devTools无效解决办法
- Mybatis:使用bean传值,当传入值为Null时,提示“无效的列类型”的解决办法
- 对话框工程CTreeCtrl(checkbox风格)在OnInitDialog中调用CTreeCtrl::SetCheck()无效的问题
- Eclipse 的格式化代码快捷键无效问题的解决办法(使用搜狗输入法的时候)
- 使用迭代器遍历List的时候修改List报ConcurrentModificationException异常的解决办法
- Android使用requestWindowFeature(Window.FEATURE_NO_TITLE)方法去除标题无效解决办法
- Intellij IDEA 使用Spring-boot-devTools无效解决办法
- 转帖:MS SQL Server 2000 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法
- HTK3.4.1在Win7 下HSLab **.sig使用无效的解决办法
- ie8响应式兼容方案,respond.js的用法及使用时无效的解决办法
- Intellij IDEA 使用Spring-boot-devTools无效解决办法
- Android使用TextView,设置onClick属性无效解决办法
- Intellij IDEA 使用Spring-boot-devTools无效解决办法