FAQ по Visual Basic

Содержание / Windows API Поиск | Далее

§ 5.8. Как создать меню с картинками?

Лобовая атака с применением API функции SetMenuItemBitmaps не пройдет. Картинки в меню получаются иных цветов, нежели в исходной битмапе, и это связано с особенностями реализации этой функции. Дабы избежать игры цвета, нужно с нуля, через API создавать меню, что неудобно.

Примеры, что были мне присланы, реализуют другой подход, который заключается в получении hDC (хендл контекста устройства) пункта меню и перерисовывании его на лету средствами API. Этот путь позволяет использовать уже готовое меню, созданное в IDE, но имеет существенный недостаток — использование сабклассинга. В готовом EXE/DLL этот недостаток непринципиален, но на стадии отладки программы способен попортить немало крови падениями VB IDE. Дабы избежать этого, никогда не завершайте работу программы нажатием на кнопку End в IDE! Используйте кнопку [x] окна, в ивенте Form_[Query]Unload которого находится код, возвращающий указатель на старый обработчик. (Впрочем, можно переделать код под библиотеку MsgHook, которая более лояльно относится к экстремальному завершению программы.)

Примеры находятся в архивах BitmapMenu1 и BitmapMenu2. В обоих случаях реализуется примерно один и тот же механизм, но реализованный разными путями. Первый пример, несмотря на невзрачность, позволяет использовать иконки и битмапы любого размера, не только 16x16. Внешний вид второго примера более аккуратен, но без его переделки нельзя использовать битмапы, размер которых отличен от 16x16.

Автор:
Александр Щербаков

Предыдущий раздел Следующий раздел

© 2004. При цитировании, пожалуйста, не забудьте поставить ссылку на оригинальную страницу.