我已经成功实现了使用Win32 API在VB 6中设置树视图背景颜色的方法:http://support.microsoft.com/kb/178491
然而,有一件事出错:当你将树节点扩展到两个以上的深度时,内部加上[+]
和减去左边的区域(有时在下面) [-]
标志仍为白色。
是否有人知道如何将此区域设置为正确的背景颜色?
注意:我还设置了每个节点的BackColor,以及树视图图像列表的BackColor。
这是我的代码版本:
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
答案 0 :(得分:1)
这是常见控件(mscomctl.ocx)第6版中的已知错误。您正在使用的API例程适用于常见控件的第5版(comctl32.dll)。原因是因为mscomctl.ocx实际上是对Windows中包含的常用控件的重写,因此Windows公共控件API和主题存在一些已知错误。 (参见本文的介绍:http://vbnet.mvps.org/index.html?code/comctl/tveffects.htm以获得更有说服力的解释)。
我之前搜索过这个问题的解决方案,我唯一想到的(除了你已经发现的解决方法)是用版本5替换项目中的控件。记住,这个控件包还包括ListView和ImageList,因此您需要在项目中替换版本5的那些。
或者,您也可以尝试使用添加了更多功能的第三方替换本机控件。虽然我没有亲自尝试过,但您可以尝试以下示例:http://www.vbaccelerator.com/home/vb/code/controls/TreeView/TreeView_Control/article.asp。
答案 1 :(得分:0)
好的,我找到了一个将TreeView.Style
属性设置为tvwPlusPictureText
的足够好的解决方案。这是对我之前的评论(我将其设置为tvwPictureText
)的改进,因为我仍然可以展开/折叠节点。
所以,请考虑问题仍然存在,如果有更好的解决方案,请告诉我。
答案 2 :(得分:0)
包含以供参考(我不自己尝试这个)。似乎是一种更低级的子类化方法:
http://www.bigresource.com/Tracker/Track-vb-h0tV8eVC8M/(见Iouri的评论)