Try to define a font of Canvas before calling TextWidth (I mean DestListBox.Canvas.Font.Assign(DestListBox.Font)). This horizontal scrollbar was tested already and was working well..
Thank you for demo. This solution (LB_SETHORIZONTALEXTENT message) working if listbox is visible already seems. Try to call AddHScroll after UpdateFrame…