Ряд непростых (для меня) вопросов по SysTreeView32 - VB

Узнай цену своей работы

Формулировка задачи:

Итак. Имеется форма 'чужого' приложения. На ней - 'дерево', т.е. элемент SysTreeView32. Мне нужно сделать с ним следующие ужасные вещи: 1. Нарисовать в нём линию - прям поверх всего, что в нём есть(? как ?). 2. Вывести в него (заданным цветом и шрифтом) текст - тоже поверх всего (? через API DrawText ?). 3. Развернуть (expand) все его узлы, находящиеся НИЖЕ текущего (выбранного) узла (? как достучаться до коллекции узлов ?). 4. Нарисовать/убрать вокруг него 'рамку' заданной толщины и цвета. Но, в отличие от пунктов 1 и 2, рисовать надо 'в воздухе', не 'портя' при этом дерево. Я не силён в графических API, поэтому прошу помощи. И ещё один вопрос: Нет ли у кого VB-кода для 'склейки' двух BMP-файлов в один? (предполагается, что они одинакового размера, и склеиваются 'по вертикали' - так, что один оказывается ПОД другим) У меня есть исходный код на какой-то старой версии Паскаля, но он - для склейки ТОЛЬКО 24-битных битмапов. С битмапами других цветностей он отказывается работать. Посему, в идеале, мне бы найти универсальный код. Времени детально разбираться со структурой BMP-файлов (чтобы переделать паскалевский код) просто нет. Спасибо.

Решение задачи: «Ряд непростых (для меня) вопросов по SysTreeView32»

textual
Листинг программы
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
 
Private Declare Function CreateFont Lib 'gdi32' Alias 'CreateFontA' (ByVal nHeight As Long, ByVal nWidth As Long, ByVal nEscapement As Long, ByVal nOrientation As Long, ByVal fnWeight As Long, ByVal fdwItalic As Boolean, ByVal fdwUnderline As Boolean, ByVal fdwStrikeOut As Boolean, ByVal fdwCharSet As Long, ByVal fdwOutputPrecision As Long, ByVal fdwClipPrecision As Long, ByVal fdwQuality As Long, ByVal fdwPitchAndFamily As Long, ByVal lpszFace As String) As Long
Private Declare Function SelectObject Lib 'gdi32' (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib 'gdi32' (ByVal hObject As Long) As Long
Private Declare Function DrawText Lib 'user32' Alias 'DrawTextA' (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
Private Declare Function GetDeviceCaps Lib 'gdi32' (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function GetDC Lib 'user32' (ByVal hWnd As Long) As Long
 
Const FW_NORMAL = 400
Const FW_BOLD = 700
 
Const LOGPIXELSY = 90
 
Const DT_CENTER = &H1
 
Private Sub Form_Paint()
   Dim hFont As Long, hOldFont As Long, rc As RECT, lSize As Long
   Me.Cls
   lSize = 14 ' Font size
   lSize = lSize * GetDeviceCaps(GetDC(0), LOGPIXELSY)  72
   hFont = CreateFont(-lSize, 0, 0, 0, FW_NORMAL, False, False, False, 204, 0, 0, 0, 0, 'Comic Sans MS')
   hOldFont = SelectObject(Me.hdc, hFont)
   rc.Left = 0: rc.Top = 0
   rc.Right = Me.ScaleWidth  Screen.TwipsPerPixelX: rc.Bottom = Me.ScaleHeight  Screen.TwipsPerPixelY
   DrawText Me.hdc, 'Hello world!', -1, rc, DT_CENTER
   SelectObject Me.hdc, hOldFont
   DeleteObject hFont
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.714 из 5
Похожие ответы