Сделайте узел в дереве VB6 курсивом - PullRequest
1 голос
/ 15 февраля 2011

Я бы хотел сделать текст на отдельных узлах курсивом в виде дерева. Звучит просто, но я не смог выяснить как. На узле нет свойства, позволяющего это сделать. Я могу сделать его жирным, изменить цвет или установить цвет фона, но не выделять его курсивом. Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

3 голосов
/ 15 февраля 2011

Вы правы, это звучит просто. К сожалению, однако, это не так просто сделать в реальности. Элемент управления TreeView в VB6 является оберткой вокруг дерева общих элементов управления, но он не раскрывает большую часть функциональности элемента управления. Вы можете делать то, что вы хотите, создав подкласс управления и обработав событие рисования элемента как владелец. У меня не установлена ​​удобная среда разработки VB6, но вот несколько полезных ресурсов, которые вы можете проверить:

Сайт Брэда Мартинеса на хардкорных советах VB6:
http://btmtz.mvps.org/treeview/

и мой личный фаворит:
VBAccerator веб-сайт Стива МакМахона
http://www.vbaccelerator.com/home/VB/Code/Controls/TreeView/TreeView_Control/article.asp, которая имеет очень хорошую реализацию пользовательского элемента управления, которую вы можете вставить прямо в свой проект, исходный код и все.

Эти два сайта необходимы для разработки VB6 наряду с сайтом Карла Петерсона: http://vb.mvps.org/

Удачи!

1 голос
/ 15 февраля 2011

Нет простого способа сделать это.Обычно необходимо:

  • использовать элемент управления TreeView из Microsoft Windows Common Controls 5.0 (SP2)
  • для элементов управления подкласса hWnd
  • при OCM_NOTIFY проверке сообщений дляNM_CUSTOMDRAW
    • на этапе CDDS_PREPAINT возврат CDRF_NOTIFYITEMDRAW
    • на этапе CDDS_ITEMPREPAINT выбор нестандартного шрифта для пропущенного hDC и возврат CDRF_NEWFONT

Нет простого способа получить hItem из узла дерева.Я использую этот хакерский способ:

Private Function pvGetHItem(oNode As ComctlLib.Node) As Long
    Call CopyMemory(pvGetHItem, ByVal ObjPtr(oNode) + 68, 4)
End Function
...