Как изменить цвет меню? - VB
Формулировка задачи:
Как изменить цвет меню?
Решение задачи: «Как изменить цвет меню?»
textual
Листинг программы
- Option Explicit
- ' CreateBrushIndirect используется, чтобы создать фоновую кисть для меню
- Private Declare Function CreateBrushIndirect Lib "gdi32" (lpLogBrush As LOGBRUSH) As Long
- ' GetMenu используется, чтобы получить дескриптор меню
- Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
- ' GetMenuInfo используется, чтобы получить текущую информацию для меню
- Private Declare Function GetMenuInfo Lib "user32" (ByVal hMenu As Long, lpcmi As tagMENUINFO) As Long
- ' SetMenuInfo используется, чтобы установить фоновую кисть назад в меню и все подменю
- Private Declare Function SetMenuInfo Lib "user32" (ByVal hMenu As Long, lpcmi As tagMENUINFO) As Long
- ' Используется в запросах к CreateBrushIndirect
- Private Type LOGBRUSH
- lbStyle As Long ' Тип cтиля (мы только должны создать твердый фон для этого примера)
- lbColor As Long ' Установите цвет кисти
- lbHatch As Long ' Стиль штриховки (не используемый в этом примере, потому что это игнорируется для Твердого стиля)
- End Type
- ' Используется в GetMenuInfo и запросах SetMenuInfo
- Private Type tagMENUINFO
- cbSize As Long ' Размер структуры типа (используйте len, чтобы вычислить)
- fMask As Long ' Маска информации / действий, чтобы обработать
- dwStyle As Long ' Стиль меню (не используемый в этом примере)
- cyMax As Long ' Максимальная высота меню в пикселах (не используется в этом примере)
- hbrBack As Long ' Дескриптор фоновой кисти
- dwContextHelpID As Long ' ИДЕНТИФИКАТОР Справочного контекста (не используется в этом примере)
- dwMenuData As Long ' Данные меню (снова не используются в этом примере)
- End Type
- Private Const BS_SOLID = 0 ' Твердый стиль для кисти
- Private Const MIM_APPLYTOSUBMENUS = &H80000000 ' Обращение к маске подменю
- Private Const MIM_BACKGROUND = &H2 ' Фоновая маска
- Private Sub Form_Load()
- Dim ret As Long ' Переменная для удержания возвращаемых значения от GetMenuInfo и SetMenuInfo
- Dim hMenu As Long ' Переменная для удержания дескриптора меню
- Dim hBrush As Long ' Переменная для удержания дескриптора фоновой кисти, которую мы собираемся создавать
- Dim lbBrushInfo As LOGBRUSH ' Переменная для удержания информации CreateBrushIndirect API
- Dim miMenuInfo As tagMENUINFO ' Переменная для удержания информации меню
- lbBrushInfo.lbStyle = BS_SOLID ' Установить тип кисти
- lbBrushInfo.lbColor = vbRed ' Здесь мы устанавливаем наш цвет кисти
- lbBrushInfo.lbHatch = 0 ' Это значение игнорируется
- hBrush = CreateBrushIndirect(lbBrushInfo) ' Мы создаем нашу кисть
- hMenu = GetMenu(Me.hwnd) ' Получают дескриптор меню, которое изменяем
- miMenuInfo.cbSize = Len(miMenuInfo) ' Набор MenuInfo структурирует размер так, чтобы мы не получили ошибки
- ret = GetMenuInfo(hMenu, miMenuInfo) ' Получить фактическую информацию меню (в случае успеха возвращается 0)
- miMenuInfo.fMask = MIM_APPLYTOSUBMENUS Or MIM_BACKGROUND ' Устанавливают маску для изменений (изменение фона меню и всех подменю)
- miMenuInfo.hbrBack = hBrush ' Назначение нашей кисти для меню
- ret = SetMenuInfo(hMenu, miMenuInfo) ' Записывают нашу информацию назад в меню. Все OK (в случае успеха возвращается non-zero)
- End Sub
- Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
- If Button = vbRightButton Then 'Процедура контекстного меню
- Me.PopupMenu mnuMenu
- End If
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д