My guess would be that when you do the GetDC-GetTextExtent thing the DC has a different font selected into it (System font maybe?) than when the tree is drawing the items.
When you do the calculation, maybe try querying the tree for its font with
GetFont[
^] and use it for the calculation.