CTreeCtrl的展开无需滚动(CTreeCtrl Expand without scrollin

2019-10-28 20:36发布

在我的CTreeCtrl,当我展开这是不可见的节点控制自动重新定位树,使展开的节点可见。 有什么办法来防止这种行为?

使用案例:我有一棵树被加载项异步从远程源,并且可以建立树的“底部”相当长的一段时间,目前跳转到,因为它是完成各个节点的树的行为是很分心用户。

目前的解决方法:

/******************************************************************************
 Expand an item while retaining the tree position
 ******************************************************************************/
void CFileOpenTreeView::ExpandWithoutJumping(HTREEITEM hItem)
{
    // This still flickers for some reason, but at least it doesn't jump
    LockWindowUpdate();
    HTREEITEM hFirstVisible = GetTreeCtrl().GetFirstVisibleItem();

    GetTreeCtrl().Expand(hItem, TVE_EXPAND);

    GetTreeCtrl().SelectSetFirstVisible(hFirstVisible);
    UnlockWindowUpdate();
    Invalidate();
}

Answer 1:

要回答你的问题直接,你可以关闭窗口清爽正在填充控制的同时,使用CWnd::LockWindowUpdate()CWnd::UnlockWindowUpdate()

一般来说,不过,如果可以的话,你可能要重新考虑你的策略。 例如,您可以填充树中的子节点不扩大父节点。

此外,在使用的情况下你所描述,你可能要考虑动态填充一个节点的孩子,只有当父节点是由用户扩展。



文章来源: CTreeCtrl Expand without scrolling
标签: mfc