Сделайте узел в дереве VB6 курсивом

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

2 ответа

Вы правы, что это звучит просто. К сожалению, однако, это не так просто сделать в реальности. Элемент управления TreeView в VB6 является оберткой вокруг дерева общих элементов управления, но он не раскрывает большую часть функциональности элемента управления. Вы можете делать то, что вы хотите, создав подкласс управления и обработав событие рисования элемента как владелец. У меня нет удобной среды IDE 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/

Удачи!

Нет простого способа сделать это. В основном вы должны:

  • использовать элемент управления 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
Другие вопросы по тегам