15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


4 лампочки в одной иконке трея.


Автор: Меньшиков Дмитрий.

Среда: Win32, тестировалось под Win98, Win2000

CTrayLights

Описание:

Данный класс представляет удобный способ работы с четырьмя лампочками в одной иконке трея. Это может быть полезно при отсутствии пользовательского интерфейса у программы со сложной внутренней структурой (разделяемые ресурсы, потоки, взаимодействие с другим ПО и т.д.), а также при отладке или исследовании. Также это довольно неплохой способ диагностики проблем в случае удаленного низкоквалифицированного пользователя. 4 отдельно управляемые лампочки по 16 цветов дают возможность видеть отражение внутренних процессов программы, причем нескольких параметров, экономя пространство в трее. Каждая лампочка может быть включена в любой из 16 основных цветов или прозрачный, или выключена. Цвет выключенных лампочек можно задать, по умолчанию - прозрачный.

Использование:

Здесь все просто. Объявляется экземпляр класса CTrayLights, затем вызовом StartTrayLights() иконка помещается в трей, затем вызовами FireLightOn/Off() меняются цвета нужных лампочек, затем вызовом EndTrayLights() работа завершается. Последний вызов может быть опущен, т.к. он происходит и из деструктора.

Методы SetOffColor() и FireLightOff() добавлены для гибкости и удобства и могут не вызываться. Кроме того, можно использовать несколько иконок, наращивая число лампочек, для новых иконок достаточно задавать другие iconID.

Как это работает:

Из ICO файла стандартной иконки 16х16х16 выдрано примерно 300 байт, которые во время выполнения модифицируются, когда меняются значения цвета и прозрачности. Из этой цепочки байт создются иконки. При задании цвета сначала создается новая иконка, затем она заменяет ту, которая уже в трее, затем старая освобождается по сохраненному дескриптору. Работа с байтовой цепочкой неочевидна, но код получается компактным и быстрым.

 

Downloads

Загрузить демонстрационный проект - 14 Kb