Jenter Алекс
Шрифт:
ПРИМЕЧАНИЕ
Для добавления этого обработчика можно использовать ClassWizard. Если оно не появляется в списке Messages, перейдите на вкладку Class Info и установите Message filter: Window.
Это все на сегодня. Пока!
Алекс Jenter jenter@rsdn.ru Красноярск, 2001. Рассылка является частью проекта RSDN.Программирование на Visual C++
Выпуск №45 от 20 мая 2001 г.
Всем привет!
СТАТЬЯ
Прозрачность – это просто
Автор: Виталий Брусенцев
Демонстрационный проект (57 Kb, Visual C++ 6.0)
Демонстрационная программа (45 Kb, Windows 98 и выше, режим экрана HiColor и выше)
Прежде чем начать, убедимся, что понимаем друг друга:
• Растровое изображение, растр (bitmap) – прямоугольная картинка, состоящая из пикселов.
• Пиксел – минимальный элемент изображения, точка на экране или в памяти растра.
• Прозрачность – свойство некоторых пикселов не отображаться на устройстве вывода, оставляя оригинальное изображение неизменным.
• Полупрозрачность – такое взаимодействие пикселов, при котором видны как пикселы выводимого растра, так и фоновое изображение.
• Спрайт – растровое изображение с прозрачными и полупрозрачными участками.
Зачем нужны растровые изображения с прозрачностью или полупрозрачностью отдельных участков? Это важные элементы графического интерфейса Windows, которые вы можете наблюдать каждый раз, когда включаете компьютер. Иконки на рабочем столе имеют прозрачные участки, что позволяет видеть "сквозь" них. Когда вы, работая в папке Windows 98, перетаскиваете какой-нибудь объект, его значок становится полупрозрачным, позволяя видеть, что в данный момент находится под ним. И, наконец, нельзя забывать о таких "графикоемких" программах, как игры. Трудно себе представить, чтобы в тщательно спроектированной плоской космической "стрелялке" все корабли имели прямоугольную форму. А при отрисовке взрывов желательно делать их полупрозрачными, приближая картинку к реальности.
Вообще – то на эту тему писали довольно много. Для понимания основных механизмов получения эффектов прозрачности рекомендую прочитать статью Рона Джери "Bitmaps with transparency" (ее можно найти в MSDN в разделе Technical Articles->Multimedia->GDI). Также рекомендую изучить находящиеся там статьи Дейла Роджерсона ("Sprites Make the World Go Round") и Германа Родента ("Animation in Win32").
К сожалению, все эти статьи разделяют общий недостаток – почтенный возраст. Цель данной статьи – показать, что с появлением Windows 95, а затем Windows 98 и Windows 2000 жить программистам стало намного проще (и интереснее!). Все приводимые примеры написаны, для удобства, с использованием библиотеки MFC, но принципы остаются общими.
С выходом Windows 95 в распоряжении программистов оказалась удобная библиотека Common Controls. В ее составе были не только новые (теперь уже известные всем) элементы управления, но и невизуальный компонент – список изображения (Image List control). Его основное предназначение – содержать набор картинок одинакового размера. Это удобно для применения в разнообразных элементах – например, в панелях инструментов (toolbar).
Нас же больше интересует другая интересная возможность – хранить в списках изображений информацию о прозрачности. Это достигается одним из двух способов:
• Загрузкой растрового изображения с указанием, пикселы какого цвета считать прозрачными;
• Подготовкой специальной маски прозрачности – черно-белого растра, в котором пикселы черного цвета означают прозрачность для соответствующих точек основного растра. При этом маска прозрачности должна иметь такие же размеры, что и основной растр.
Нужно понимать, что в обоих случаях список изображений будет содержать маску прозрачности, просто при первом способе она будет создана за вас. Какой способ избрать – дело вкусов каждого программиста. Я обычно нахожу в палитре какой-нибудь ненужный цвет и назначаю его прозрачным. В большинстве случаев не везет ярко-сиреневому цвету (RGB 255,0,255).
Создать список изображения и загрузить в него растр с прозрачностью можно так:
В приводимых примерах будет предполагаться, что растровые изображения находятся в ресурсах программы и имеют глубину цвета 24 бита (16 млн. цветов). При создании списка необходимо указать размеры загружаемого растра (cx, cy), его цветовой формат (ILC_COLOR24, 16 миллионов оттенков) и признак наличия маски (ILC_MASK). Последние два параметра Create определяют число хранимых в списке изображений и величину приращения списка при нехватке места. Макрос RGB удобен для указания цвета в 24-битовом диапазоне, в данном случае – цвета прозрачности.