我想显示最后在树控件 mfc 中检查的项目

Posted

技术标签:

【中文标题】我想显示最后在树控件 mfc 中检查的项目【英文标题】:I want to display item lastly checked in tree control mfc 【发布时间】:2017-02-06 08:57:32 【问题描述】:

我试过了

void GetCheckedItems(const CTreeCtrl& tree, CArray<HTREEITEM> *checkedItems, HTREEITEM startItem = NULL)

    if (startItem == NULL)
        startItem = tree.GetRootItem();`

    for (HTREEITEM item = startItem; item != NULL; item = tree.GetNextItem(item, TVGN_NEXT))
    
        // figure out if this item is checked or not
        UINT state = (tree.GetItemState(item, TVIS_STATEIMAGEMASK) >> 12) & 15;

        if (state == 2)
        checkedItems->Add(item);

        // deal with children if present
        HTREEITEM child = tree.GetNextItem(item, TVGN_CHILD);

        if (child != NULL)
        GetCheckedItems(tree, checkedItems, child);
    

现在我有一个包含检查值的数组,但我怎么知道我上次检查了哪个。

【问题讨论】:

看到我的对话框上有一个树控件,其中我添加了一些节点和叶子,现在我想检索最近检查过的一个特定项目 【参考方案1】:

只需对TVN_ITEMCHANGED 使用处理程序即可。每当项目状态发生变化时都会调用它。

您需要检查已更改的状态标志。您可以检测到TVIS_STATEIMAGEMASK 的更改。

【讨论】:

【参考方案2】:
CString m;
    HTREEITEM selItem;
    selItem=m_treeRel.GetSelectedItem();
    UINT uFlags = 0;
    CPoint pt(0, 0);
    GetCursorPos(&pt);
    m_treeRel.ScreenToClient(&pt);
    HTREEITEM hItem = m_treeRel.HitTest(pt, &uFlags);
    if(NULL != hItem && (TVHT_ONITEM  & uFlags))
    
        /*if(selItem == hItem)
        
            m=_T("Selected Item....");
        
        else */
        if(!m_treeRel.GetCheck(hItem))
        
            m=m_treeRel.GetItemText(hItem);
            //m_treeRel.SetCheck(hItem,true);
        
        else
        
            //m=_T("ERROR");
            //m_treeRel.SetCheck(hItem,false);
        
    
    ShowMessage(m);
    *pResult = 0;

我用这个来找出上次检查了哪个项目......!

【讨论】:

以上是关于我想显示最后在树控件 mfc 中检查的项目的主要内容,如果未能解决你的问题,请参考以下文章

如何检查二叉树的右侧。在树中搜索项目

MFC 命令按钮控件如何在多字节字符集项目中显示?

限制列表控件 MFC 中的条目数

MFC HTREEITEM句柄

使列表控件中的单个项目可编辑(C++、MFC)

MFC 有内置的网格控件吗?