Blog. Just Blog

Меню с иконками на Ассемблере

07.11.2017 | Категория: Образ мышления: Assembler | Автор: ManHunter
Сегодня разберем кастомизацию такого элемента интерфейса, как выпадающее меню. Без меню обходится мало какое современное приложение, но вот работа с меню стандартными средствами обычно ограничивается установкой флага чекбокса, затенением неактивных пунктов или отрисовкой субменю. Попытка разнообразить меню, например, своими иконками, приводит к очень печальному результату. Ситуацию особо не спасают ни собственные битмапы, ни подгрузка изображений из списка ImageList. Очень странно, что на протяжении многих лет разработчики Windows так и не сделали инструментов "из коробки", чтобы можно было легко и комфортно работать с менюшками. К счастью, в системе есть "потайной ход", с помощью которого можно кастомизировать меню так, как вам захочется. Для своих проектов я постарался сделать как можно более универсальный инструмент для работы с меню и сейчас я с вами им поделюсь.

Начнем создание собственных элементов интерфейса с того, что для каждого настраиваемого меню резервируется структура с данными следующего формата:
  1. struct MYMENU
  2.   hMenu      dd ?
  3.   itemWidth  dd ?
  4.   itemHeight dd ?
  5.   hasIcons   db ?
  6. ends
В это же время, все меню, которые требуют кастомизации, формируют массив структур и указателей на них. Список заканчивается нулевым DWORD'ом:
  1. menus   dd Menu1
  2.         dd Menu2
  3.         dd ?
  4.  
  5. Menu1   MYMENU
  6. Menu2   MYMENU
Описание полей структуры: hMenu - хэндл меню, itemWidth - ширина пункта меню в пикселах, itemHeight - высота пункта меню в пикселах, hasIcons - флаг, определяющий, будут или нет использоваться в меню иконки (1 - да, 0 - нет). Если иконки будут использоваться, то слева от текста пунктов меню резервируется место для них, в противном случае текст пункта будет отрисовываться прямо от края меню.

Читать статью целиком »
Просмотров: 216 | Комментариев: 0

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2017
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.06 сек. / MySQL: 1 (0.0076 сек.) / Память: 4.5 Mb
Наверх