Как изменить цвет меню? - VB

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

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

Как изменить цвет меню?

Решение задачи: «Как изменить цвет меню?»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. ' CreateBrushIndirect используется, чтобы создать фоновую кисть для меню
  4. Private Declare Function CreateBrushIndirect Lib "gdi32" (lpLogBrush As LOGBRUSH) As Long
  5. ' GetMenu используется, чтобы получить дескриптор меню
  6. Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
  7. ' GetMenuInfo используется, чтобы получить текущую информацию для меню
  8. Private Declare Function GetMenuInfo Lib "user32" (ByVal hMenu As Long, lpcmi As tagMENUINFO) As Long
  9. ' SetMenuInfo используется, чтобы установить фоновую кисть назад в меню и все подменю
  10. Private Declare Function SetMenuInfo Lib "user32" (ByVal hMenu As Long, lpcmi As tagMENUINFO) As Long
  11. ' Используется в запросах к CreateBrushIndirect
  12. Private Type LOGBRUSH
  13.     lbStyle As Long ' Тип cтиля (мы только должны создать твердый фон для этого примера)
  14.    lbColor As Long ' Установите цвет кисти
  15.    lbHatch As Long ' Стиль штриховки (не используемый в этом примере, потому что это игнорируется для Твердого стиля)
  16. End Type
  17. ' Используется в GetMenuInfo и запросах SetMenuInfo
  18. Private Type tagMENUINFO
  19.     cbSize As Long ' Размер структуры типа (используйте len, чтобы вычислить)
  20.    fMask As Long ' Маска информации / действий, чтобы обработать
  21.    dwStyle As Long ' Стиль меню (не используемый в этом примере)
  22.    cyMax As Long ' Максимальная высота меню в пикселах (не используется в этом примере)
  23.    hbrBack As Long ' Дескриптор фоновой кисти
  24.    dwContextHelpID As Long ' ИДЕНТИФИКАТОР Справочного контекста (не используется в этом примере)
  25.    dwMenuData As Long ' Данные меню (снова не используются в этом примере)
  26. End Type
  27.  
  28. Private Const BS_SOLID = 0 ' Твердый стиль для кисти
  29. Private Const MIM_APPLYTOSUBMENUS = &H80000000 ' Обращение к маске подменю
  30. Private Const MIM_BACKGROUND = &H2 ' Фоновая маска
  31.  
  32. Private Sub Form_Load()
  33.  
  34. Dim ret As Long ' Переменная для удержания возвращаемых значения от GetMenuInfo и SetMenuInfo
  35. Dim hMenu As Long ' Переменная для удержания дескриптора меню
  36. Dim hBrush As Long ' Переменная для удержания дескриптора фоновой кисти, которую мы собираемся создавать
  37. Dim lbBrushInfo As LOGBRUSH ' Переменная для удержания информации CreateBrushIndirect API
  38. Dim miMenuInfo As tagMENUINFO ' Переменная для удержания информации меню
  39.  
  40. lbBrushInfo.lbStyle = BS_SOLID ' Установить тип кисти
  41. lbBrushInfo.lbColor = vbRed  ' Здесь мы устанавливаем наш цвет кисти
  42. lbBrushInfo.lbHatch = 0 ' Это значение игнорируется
  43. hBrush = CreateBrushIndirect(lbBrushInfo) ' Мы создаем нашу кисть
  44. hMenu = GetMenu(Me.hwnd) ' Получают дескриптор меню, которое изменяем
  45. miMenuInfo.cbSize = Len(miMenuInfo) ' Набор MenuInfo структурирует размер так, чтобы мы не получили ошибки
  46. ret = GetMenuInfo(hMenu, miMenuInfo) ' Получить фактическую информацию меню (в случае успеха возвращается 0)
  47. miMenuInfo.fMask = MIM_APPLYTOSUBMENUS Or MIM_BACKGROUND ' Устанавливают маску для изменений (изменение фона меню и всех подменю)
  48. miMenuInfo.hbrBack = hBrush ' Назначение нашей кисти для меню
  49. ret = SetMenuInfo(hMenu, miMenuInfo) ' Записывают нашу информацию назад в меню. Все OK случае успеха возвращается non-zero)
  50.  
  51. End Sub
  52.  
  53. Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  54.  
  55. If Button = vbRightButton Then 'Процедура контекстного меню
  56.    Me.PopupMenu mnuMenu
  57. End If
  58.  
  59. End Sub

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


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

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

9   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы