在VB6中设置treeview背景颜色有一个缺陷 - 有帮助吗?

时间:2010-04-27 15:05:45

标签: winapi vb6 treeview

我已经成功实现了使用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

3 个答案:

答案 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的评论)