Сделайте узел в дереве 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