【问题标题】:Re-expand treeview item重新展开树视图项目
【发布时间】:2013-02-22 12:57:43
【问题描述】:

我正在开发一个旧的 MFC 应用程序。应用程序中有一个 TreeView 控件。 OnItemExpanding 函数被覆盖。我得到一个 TreeViewItem 的孩子,它被扩展了。如果一个节点第一次展开,它的子节点被填充。如果项目没有子项,则展开图标(+ 号)将从 TreeViewItem 中删除。

现在的问题是我扩展了一个没有子节点的节点。完成一些工作后,子节点被添加到该节点。但现在我无法获得新添加的孩子,因为缺少展开图标。如何刷新 TreeView 中的特定节点。我创建了一个刷新按钮。这样我就可以在 TreeView 中找到我当前选择的节点,但接下来要做什么。

这里是代码。

void CMyTreeView::OnItemExpanding(CTreeCtrl& tree, NMHDR* pNMHDR, LRESULT* pResult) 
{
   //This is only called when I click on expand (+ sign)
   //some check here which populates children.
}

void CMyTreeView::RefreshNode(CTreeCtrl& tree, HTREEITEM selectedNode)
{
    // What should I do here?
}

【问题讨论】:

    标签: c++ mfc treeview treeviewitem


    【解决方案1】:

    您必须将 TVITEM 的 cChildren 设置为“一”:

    TVITEM tvItem = {0};
    tvItem.mask   = TVIF_HANDLE | TVIF_CHILDREN;
    tvItem.hItem  = selectedNode;
    tvItem.cChildren = 1;
    tree.SetItem(&tvItem);
    

    【讨论】:

      【解决方案2】:

      您正在尝试重新发明通用控件库已经可以为您做的事情。

      您需要做的是,当您插入“文件夹”项目集itemex.cChildren = I_CHILDRENCALLBACK 时,它将告诉树在需要知道项目是否有子项时向您发送TVN_GETDISPINFO 通知。然后它会类似地为每个孩子发送TVN_GETDISPINFO

      它只会在绝对必要时发送通知,因此您无需白做任何昂贵的事情。

      【讨论】:

      • I_CHILDRENCALLBACK 只是询问 Windows 是否应该在 Treeview 项目的左侧绘制“+”号。仅在绝对必要时才发送通知是不正确的。当我只将鼠标移到 Treeview 上时,我会看到数十条消息。
      【解决方案3】:

      我会说,您需要更改 ItemState:http://msdn.microsoft.com/de-de/library/ce034e69%28v=vs.80%29.aspx

      BOOL SetItemState( HTREEITEM hItem, UINT nState, UINT nStateMask );

      看看 HTREEITEM:

      typedef struct tagTVITEM {
        UINT      mask;
        HTREEITEM hItem;
        UINT      state;
        UINT      stateMask;
        LPTSTR    pszText;
        int       cchTextMax;
        int       iImage;
        int       iSelectedImage;
        int       cChildren;
        LPARAM    lParam;
      } TVITEM, *LPTVITEM;
      
      cChildren Type: int
      
      Flag that indicates whether the item has associated child items. This member can be one of the following values. 
      

      【讨论】:

        猜你喜欢
        • 2020-04-02
        • 1970-01-01
        • 1970-01-01
        • 2016-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多