我给树控件加了checkbox,现在我想在对话框OnInitDialog中初始化全部选项为选中状态,调用了GetFirstVisibleItem,SetCheck(hItem,TRUE),GetNextVisibleItem,为什么就是没法实现呀?打开对话框还是全部未选中状态。跪求各位大神帮忙!

解决方案 »

  1.   

    补充:我单独在按钮中可以实现!这跟OnInitDialog函数有关吗?跪求释疑!
      

  2.   

    m_Tree.SendMessage(TVM_SETIMAGELIST,(WPARAM)TVSIL_NORMAL,(LPARAM)hImageList);
    //放在SetImageList 后:
    m_Tree.SetCheck(hti,TRUE);
      

  3.   

    // The pointer to my tree control.
    extern CTreeCtrl* pmyTreeCtrl;UINT i, uCount = pmyTreeCtrl->GetVisibleCount();
    HTREEITEM hItem = pmyTreeCtrl->GetFirstVisibleItem();// Toggle the check state of all the visible items.
    for (i=0;i < uCount;i++)
    {
       ASSERT(hItem != NULL);
       pmyTreeCtrl->SetCheck(hItem, !pmyTreeCtrl->GetCheck(hItem));
       hItem = pmyTreeCtrl->GetNextVisibleItem(hItem);
    }
      

  4.   

    请问,发送TVM_SETIMAGELIST这个消息神马意思呀?
      

  5.   

    你的tree没有image吗?
    如表示文件类型的图?
      

  6.   

    木有啊,再说你这段代码m_Tree.SetCheck(hti,TRUE);对我没什么用。我的问题是为什么我在按钮中可以实现全部选中checkbox,在OnInitDialog中就不能呢?
      

  7.   

    你这段代码从MSDN中拷出来的,我基本上是这么用的。但你看楼上,这样用不能实现
      

  8.   

    楼主不知道TVM_SETIMAGELIST,估计他的TreeView是TVS_CHECKBOXES风格的楼主初始化是怎么InsertItem的呢?InsertItem之后就得到HTREEITEM了,哪用遍历TreeView?
      

  9.   

    “我的问题是为什么我在按钮中可以实现全部选中checkbox,在OnInitDialog中就不能呢?”
    tree还没初始化完。
    你可以在初始化中打开timer。
    在OnTimer中先Kill、timer,把按钮中的代码复制到timer中。
      

  10.   

    我初始化是定义HTREEITEM hRoleItem;然后在for循环中hRoleItem = m_treeRole.InsertItem(arrRole.GetAt(i),0,0,NULL);遍历插入数据。接着就是GetFirstVisibleItem,for循环SetCheck(hItem,TRUE),GetNextVisibleItem,想初始化所有Item为选中状态。我注意了SetCheck(hItem)和之前插入的hRoleItem指针是一一对应的。不晓得还有什么问题
      

  11.   

    补充一下下,我还在遍历前后加了m_treeRole.SetRedraw(FALSE);m_treeRole.SetRedraw(TRUE);也木有效果。我调试时定义了BOOL bCheck = m_treeRole.GetCheck(hItem);返回结果为0.然后再定义了BOOL bSet = m_treeRole.SetCheck(hItem,!bCheck);返回结果为1.说明设置成功了呀!为什么界面上就不能显示呢?
      

  12.   

    哈哈,谢谢你了。真的是tree没有初始化完呢!我在定时器中实现刷新就没问题了,十分感谢了。同时也感谢gfm688参与,CSDN高手如云,真的不假呀!再次感谢了!结贴给分啦!