调用 SelectItem 函数时如何强制 CTreeCtrl 不滚动到项目?

Posted

技术标签:

【中文标题】调用 SelectItem 函数时如何强制 CTreeCtrl 不滚动到项目?【英文标题】:How to force CTreeCtrl not to scroll to the item when SelectItem function is called? 【发布时间】:2017-09-26 08:47:06 【问题描述】:

我的对话框中有简单的 CTreeCtrl。它只有两个深度,如下所示:

假设用户点击了“第三”节点使其被选中,然后他按下对话框上的按钮并执行下一个代码:

// m_tree is a dialog-based class member of CTreeCtrl type 
HTREEITEM hItem = m_tree.GetSelectedItem();
if (hItem)

    hItem = m_tree.GetNextSiblingItem(hItem); 
    if (hItem)
    
        m_tree.SelectItem(hItem);
    

在我的示例中标签为“Fourth”的 hItem 之后,在树形控制窗口的底部变得可见:

如何强制树控件不向下滚动到所选项目?我只想选择它,仅此而已。

【问题讨论】:

您可以尝试在之前选择的项目上调用msdn.microsoft.com/en-us/library/tcee049y.aspx EnsureVisible。不过这可能会闪烁,因此您可以在进行新选择和 EnsureVisible 之前尝试使用 SetRedraw(FASLE)。 @VuVirt heh,我很惊讶,但它似乎有效 【参考方案1】:

您可以尝试在之前选择的项目上调用EnsureVisible。不过这可能会闪烁,因此您可以在进行新选择和 EnsureVisible 之前尝试使用 SetRedraw(FASLE)。

【讨论】:

以上是关于调用 SelectItem 函数时如何强制 CTreeCtrl 不滚动到项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何强制调用某些构造函数/函数以使用命名参数?

调用放置在另一个中的函数

我们如何强制 getattribute() 为魔术方法(特殊方法)调用?

java 强制类型转换的规则是啥?

尝试调用外部 VBA 函数时,只能强制在公共对象模块中定义的用户定义类型

窗口最小化时如何强制刷新缩略图? (C#WPF)