0

私の 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();
}
4

1 に答える 1

1

CWnd::LockWindowUpdate()差し迫った質問に答えるために、コントロールが読み込まれている間は、 と を使用してウィンドウの更新をオフにすることができますCWnd::UnlockWindowUpdate()

ただし、一般的には、可能であれば、戦略を再考することをお勧めします。たとえば、親ノードを展開せずにツリーにサブノードを移入できます。

また、説明したユースケースでは、親ノードがユーザーによって展開された場合にのみ、ノードの子を動的に設定することを検討したい場合があります。

于 2012-07-13T22:52:23.037 に答える