Re: CTreeCtrl: Obscure behaviour on EnsureVisible
"Christoph Conrad" <nospam@spamgourmet.com> wrote in message
news:yr463wtz1wn.fsf@ID-24456.user.uni-berlin.de...
Hi,
i am using CTreeCtrl to display hierarchical organized data. After
inserting an item i select it and EnsureVisible(item). Sometimes the new
item is displayed in the tree "in the middle" of the visible process
tree, sometimes (more often) the behaviour of EnsureVisible() is like
SelectSetFirstVisible(), so that the item is the first one in the
process window, at the top. I can't figure out any rationale behind this
behaviour.
Is there a recommended way to get an item centered in the visible part
of the CTreeCtrl?
It's a real pain that the common controls don't give better positioning of
the desired item. Perhaps you can write your own function by using
CTreeCtrl::GetI haven't looked at CTreeCtrl, but for CListCtrl, you can
write your own function by first calling SelectSetFirstVisible(), then
calculate the offset from the top of your item. To do that, use
GetFirstVisibleItem
GetNextVisibleItem
and count until you get to your item. Say it is the 5th item from the top,
but for it to be in the middle, it needs to be the 8th item instead. So you
need 8 - 5 = 3 items to be inserted into the view above the desired item.
Do so by calling
GetFirstVisibleItem
GetPrevVisibleItem
3 times, then calling SelectSetFirstVisible() on that item. This will "push
down" your item by 3, and it will now be in the middle.
-- David