Как изменит стиль диалоговые окна

Как изменит стиль диалоговые окна

Как изменить цвет кнопок диалогового окна

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

Первым делом в ресурсах или в функции создания кнопки через CreateWindow(Ex) надо дополнить стиль модифицируемой кнопки параметром BS_OWNERDRAW. С этого момента все функции по рисованию перекладываются на наше приложение. Для этого приложение должно обрабатывать сообщение WM_DRAWITEM. Окну-владельцу кнопки в параметре lParam этого сообщения передается указатель на структуру DRAWITEMSTRUCT, на основании которой мы и будем заниматься рисованием.

  1. cmp [ msg ] , WM_DRAWITEM
  2. je color_button
  3. . . .
  4. . . .
  5. color_button :
  6. ; Указатель на структуру DRAWITEMSTRUCT
  7. movebx , [ lparam ]
  8. ; Установить режим смешивания фоновых цветов
  9. invoke SetBkMode , [ ebx + DRAWITEMSTRUCT . hDC ] , TRANSPARENT
  10. ; Кнопка активна?
  11. test [ ebx + DRAWITEMSTRUCT . itemState ] , ODS_SELECTED
  12. jz @ f
  13. invoke GetSysColor , COLOR_ACTIVEBORDER
  14. invoke CreatePen , PS_SOLID , 1 , eax
  15. invoke SelectObject , [ ebx + DRAWITEMSTRUCT . hDC ] , eax
  16. invoke GetSysColor , COLOR_3DLIGHT
  17. invoke CreateSolidBrush , eax
  18. invoke SelectObject , [ ebx + DRAWITEMSTRUCT . hDC ] , eax
  19. ; Прямоугольник с заливкой
  20. invoke Rectangle , [ ebx + DRAWITEMSTRUCT . hDC ] , \
  21. [ ebx + DRAWITEMSTRUCT . rcItem . left ] , \
  22. [ ebx + DRAWITEMSTRUCT . rcItem . top ] , \
  23. [ ebx + DRAWITEMSTRUCT . rcItem . right ] , \
  24. [ ebx + DRAWITEMSTRUCT . rcItem . bottom ]
  25. jmp loc_text
  26. @ @ :
  27. ; Установить цвет и стиль рамки
  28. invoke GetSysColor , COLOR_3DDKSHADOW
  29. invoke CreatePen , PS_SOLID , 3 , eax
  30. invoke SelectObject , [ ebx + DRAWITEMSTRUCT . hDC ] , eax
  31. ; Установить цвет фона
  32. invoke GetSysColor , COLOR_HIGHLIGHT
  33. invoke CreateSolidBrush , eax
  34. invoke SelectObject , [ ebx + DRAWITEMSTRUCT . hDC ] , eax
  35. ; Прямоугольник с заливкой
  36. invoke Rectangle , [ ebx + DRAWITEMSTRUCT . hDC ] , \
  37. [ ebx + DRAWITEMSTRUCT . rcItem . left ] , \
  38. [ ebx + DRAWITEMSTRUCT . rcItem . top ] , \
  39. [ ebx + DRAWITEMSTRUCT . rcItem . right ] , \
  40. [ ebx + DRAWITEMSTRUCT . rcItem . bottom ]
  41. loc_text :
  42. ; Длина надписи на кнопке
  43. invoke GetWindowTextLength , [ ebx + DRAWITEMSTRUCT . hwndItem ]
  44. inceax
  45. mov [ len ] , eax
  46. invoke GetWindowText , [ ebx + DRAWITEMSTRUCT . hwndItem ] , buff , [ len ]
  47. ; Установить цвет текста
  48. invoke SetTextColor , [ ebx + DRAWITEMSTRUCT . hDC ] , 0x0000FFFF
  49. ; Для нажатой кнопки сдвинуть текст вниз-вправо
  50. test [ ebx + DRAWITEMSTRUCT . itemState ] , ODS_SELECTED
  51. jz @ f
  52. ; Установить цвет текста
  53. invoke SetTextColor , [ ebx + DRAWITEMSTRUCT . hDC ] , 0x000000FF
  54. add [ ebx + DRAWITEMSTRUCT . rcItem . left ] , 2
  55. add [ ebx + DRAWITEMSTRUCT . rcItem . top ] , 2
  56. @ @ :
  57. ; Надпись на кнопке
  58. leaesi , [ ebx + DRAWITEMSTRUCT . rcItem ]
  59. invoke DrawText , [ ebx + DRAWITEMSTRUCT . hDC ] , buff , [ len ] , esi , \
  60. DT_SINGLELINE + DT_VCENTER + DT_CENTER
Читайте также:  Учиться танцевать для детей современные танцы дома

В зависимости от состояния кнопки, нажата она или нет, меняется цвет фона, цвет текста и стиль рамки. Здесь рамка нарисована единым цветом и толщиной, но при необходимости можно заморочиться и нарисовать «трехмерные» границы с помощью функций MoveToEx и LineTo. Еще было бы правильным проверять, что цвета меняются именно для нужной кнопки, делается это проверкой элемента itemID в структуре DRAWITEMSTRUCT. В приведенном примере я это осознанно пропустил, чтобы не загромождать код.

В приложении пример программы с исходным текстом, демонстрирующей создание и обработку кастомизированной кнопки в диалоговом окне.

Пример программы с исходным текстом (FASM)

Источник

Диалоговое окно «Настройка» Customize dialog box

Разрешает настраивать панели инструментов и меню. Allows you to customize your toolbars and menus.

Вкладка «панели инструментов» Toolbars tab

Позволяет создавать, переименовывать, удалять и сбрасывать панели инструментов. Allows you to create, rename, delete, and reset your toolbars.

В следующей таблице описываются параметры вкладки. The following table describes the tab options.

Параметр Option Описание Description
Поле » панели инструментов » Toolbars box Отображает панели инструментов, встроенные в Visual Basic, а также все созданные вами панели инструментов. Displays the toolbars built into Visual Basic and any toolbars you create. Когда вы отображаете панель инструментов, слева от нее появляется флажок. When you show a toolbar, a check mark appears to the left of it.

Note: строка меню не может быть скрыта. NOTE: The Menu Bar cannot be hidden. Можно только сбросить ее настройки. It can only be reset.

New New Открывает диалоговое окно » Создание панели инструментов «, в котором вы вводите имя новой панели инструментов в поле имя панели инструментов . Opens the New Toolbar dialog box where you type the name for your new toolbar in the Toolbar name box.
Rename Rename Открывает диалоговое окно Переименование панели инструментов , в котором вводится новое имя панели инструментов. Opens the Rename Toolbar dialog box where you type the new name for your toolbar. Доступно только в том случае, если вы выбрали пользовательскую панель. Only available if you select a user-defined toolbar.
удаление; Delete Удаляет пользовательскую панель инструментов из вашего проекта. Deletes a user-defined toolbar from your project. Доступно только в том случае, если вы выбрали пользовательскую панель. Only available if you select a user-defined toolbar.
Reset Reset Удаляет все изменения, внесенные во встроенные панели инструментов, и восстанавливает исходное состояние этих панелей. Removes any changes to the built-in toolbars and resets them to their original state. Доступно только в том случае, если вы выбрали встроенную панель. Only available if you select a built-in toolbar.

Вкладка с командами Commands tab

Содержит команды, которые можно перетаскивать в меню и на панели инструментов. Contains commands that you can drag to your menus and toolbars. Дает возможность добавлять новые элементы управления и изменять существующие на панели меню Menu или какой-либо другой панели инструментов. Allows you to add controls and modify existing controls on the Menu bar or any toolbar. Вы также можете изменить изображения кнопок и текст добавляемых команд. You can also modify the button image and text of your added commands.

В следующей таблице описываются параметры вкладки. The following table describes the tab options.

Параметр Option Описание Description
Категории Categories Перечисление разных категорий команд. Lists the different command categories.
Команды Commands Список элементов управления, доступных для категории, которая выбрана в списке категории . Lists the controls available for the category that you select in the Categories list. Вы можете перетащить команду на панель инструментов в то место, в котором ее нужно расположить. You can drag the command to the toolbar where you want the command to reside. Чтобы добавить команду в меню, перетащите ее на название меню, а затем — в открывшееся расположение в меню. To add the command to a menu, drag it over the menu’s title and then into the location in the menu that appears.
Описание Description Отображает совет QuickTip для текущего выбранного элемента управления. Displays a QuickTip for the currently selected control.
Modify Selection (Изменить выбор) Modify Selection Дает возможность изменить выбранную команду. Allows you to change the selected command. В следующей таблице приведен список команд. See the following table for a list of commands.

В следующей таблице перечислены команды, доступные в разделе Изменение выбранных элементов. The following table lists the commands available under Modify Selection.

Команда Command Описание Description
Reset Reset Сбрасывает команду до значения по умолчанию. Resets the command to the default.
удаление; Delete Удаляет команду. Deletes the command.
Name (Имя) Name Изменяет имя элемента управления на имя, введенное в поле. Changes the name of the control to the name you type into the box. С помощью амперсанда (&) вы также можете установить сочетания клавиш. By using the ampersand (&), you can also set shortcut keys.
Копирование изображения кнопки Copy Button Image Копирует изображение кнопки в буфер обмена. Copies the button image to the Clipboard.
Изображение кнопки «вставить» Paste Button Image Вставит изображение кнопки из буфера обмена. Pastes the button image from the Clipboard.
Сброс изображения кнопки Reset Button Image Сбрасывает изображение кнопки по умолчанию. Resets the button image to its default setting.
Изображение кнопки «Изменить» Edit Button Image Отображает диалоговое окно » Редактор кнопок «. Displays the Button Editor dialog box.
Изменение изображения кнопки Change Button Image Отображает список изображений кнопок, из которых можно выбрать другое изображение для кнопки. Displays a list of button images from which you can select a different image for your button.
Стиль по умолчанию Default Style Для кнопок панели инструментов отображается только значок. For toolbar buttons, shows only the icon. Для элементов меню отображает значок и имя. For menu items, shows the icon and the name.
Только текст (всегда) Text Only (Always) Отображает только имя команды. Shows the command name only.
Только текст (в меню) Text Only (in Menus) Скрывает значок, если он есть, для элементов меню. Hides the icon, if any, for menu items. Этот параметр не оказывает никакого действия на кнопках панели инструментов. This option has no effect on toolbar buttons.
Изображение и текст Image and Text В панели инструментов отображаются значок и имя. For toolbars, shows both the icon and name. Этот параметр никак не влияет на элементы меню. This option has no effect on menu items.
Начало группы Begin a Group Для панелей инструментов на панели инструментов размещается разделительная линия перед элементом управления. For toolbars, puts a separator line before the control. Недоступно, когда элемент управления расположен в начале панели инструментов. Dimmed when the control is at the beginning of the toolbar.

Вкладка с параметрами Options tab

Позволяет изменять внешний вид строки меню и панелей инструментов; Например, вы можете изменить размер кнопок на панели инструментов, отображать подсказки и сочетания клавиш, а также добавить анимацию в меню. Allows you to change the appearance of your menu bar and toolbars; for example, you can change the size of your toolbar buttons, show ToolTips and shortcut keys, and add animation to your menus.

В следующей таблице описываются параметры вкладки. The following table describes the tab options.

Параметр Option Описание Description
Крупные значки Large icons Изменяет значки панели инструментов на значки большего размера. Changes the toolbar icons to a larger size.
Отображать подсказки для кнопок Show ScreenTips on toolbars Включает и выключает подсказки. Turns ScreenTips off and on.
Включить в подсказки сочетания клавиш Show shortcut keys in ScreenTips Показывает сочетания клавиш в меню. Displays the shortcut keys on the menus.
Анимации меню Menu animations Список доступных анимаций, которые можно использовать для строки меню. Lists available animations you can apply to your menu bar.

См. также See also

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

Оцените статью
Поделиться с друзьями