Установка цвета фона дерева в VB6 имеет недостаток - помогите? - PullRequest
0 голосов
/ 27 апреля 2010

Я успешно реализовал этот метод использования Win32 API для установки цвета фона дерева в VB 6: http://support.microsoft.com/kb/178491

Однако одна вещь идет не так : когда вы расширяете узлы дерева более чем на два уровня глубиной, область слева (а иногда и под) внутреннего плюс + 1006 * и минус [-] знаки все еще белые .

Кто-нибудь знает, как перевести эту область в правильный цвет фона?

Примечание: я также устанавливаю 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 ]

1 голос
/ 15 июня 2010

Это известная ошибка в версии 6 общих элементов управления (mscomctl.ocx). Используемая вами подпрограмма API отлично работает с версией 5 общих элементов управления (comctl32.dll). Причина в том, что mscomctl.ocx фактически переписывает общие элементы управления, включенные в Windows, поэтому есть некоторые известные ошибки с API и темами общих элементов управления Windows. (См. Введение к этой статье: 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.

0 голосов
/ 27 апреля 2010

Включено для справки (я не попробую это сам). Представляется более низкоуровневым подходом к созданию подклассов:

http://www.bigresource.com/Tracker/Track-vb-h0tV8eVC8M/ (см. Комментарий Юри)

0 голосов
/ 27 апреля 2010

Хорошо, я нашел достаточно подходящее решение для установки свойства TreeView.Style на tvwPlusPictureText. Это улучшение по сравнению с моим предыдущим комментарием (где я установил его на tvwPictureText), потому что я все еще могу развернуть / свернуть узлы.

Итак, рассмотрите вопрос все еще открытым и дайте мне знать, если есть лучшее решение.

...