I have successfully implemented this method of using the Win32 API to set the background color of a treeview in VB 6: http://support.microsoft.com/kb/178491
However, one thing goes wrong: when you expand the tree nodes more than two levels deep, the area to the left of (and sometimes under) the inner plus [+] and minus [-] signs is still white.
Does anyone know how to get this area to the correct background color, too?
Note: I’m also setting the BackColor of each node, and also the BackColor of the treeview’s imagelist.
Here’s my version of the code:
Public Sub TreeView_SetBackgroundColor(TreeView As MSComctlLib.TreeView, BackgroundColor As Long)
Dim lStyle As Long, Node As MSComctlLib.Node
For Each Node In TreeView.Nodes
Node.BackColor = BackgroundColor
Next
TreeView.ImageList.BackColor = BackgroundColor
Call SendMessage( _
TreeView.hwnd, _
TVM_SETBKCOLOR, _
0, _
ByVal BackgroundColor)
'Now reset the style so that the tree lines appear properly.
lStyle = GetWindowLong(TreeView.hwnd, GWL_STYLE)
Call SetWindowLong(TreeView.hwnd, GWL_STYLE, lStyle - TVS_HASLINES)
Call SetWindowLong(TreeView.hwnd, GWL_STYLE, lStyle)
End Sub
This is a known bug in version 6 of the common controls (mscomctl.ocx). The API routine you’re using works fine with version 5 of the common controls (comctl32.dll). The reason is because the mscomctl.ocx is actually a re-write of the common controls that are included with Windows, so there are some known bugs with Windows common controls APIs and themes. (See the introduction to this article: http://vbnet.mvps.org/index.html?code/comctl/tveffects.htm for a much more eloquent explanation).
I’ve searched before for a solution to this problem, and the only thing I came up with (other than the work-around you already discovered) is to replace the controls in your project with version 5. Remember, this control package also includes the ListView and the ImageList, so you need to replace those with version 5 as well in your project.
Alternatively, you could also try replacing the native control with one from a third-party that adds even more functionality. Though I haven’t tried it personally, you may try the following example: http://www.vbaccelerator.com/home/vb/code/controls/TreeView/TreeView_Control/article.asp.