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

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

 

Динамические иконки


Автор: Anish Mistry

Требования: VC6 SP4, W2K SP1

Как-то раз созрела необходимость сделать информационные бары, которые были бы видны в System Tray в виде иконок. Изначально я делал это следующим образом: создавал несколько различных иконок и располагал их на разных уровнях, затем манипулируя уровнями получал нужное мне изображение. Этот метод работал, пока со временем с ним стало неудобно работать, в результате чего был создан класс CMeterIcon.

Сразу предупреждаю, что класс довольно сложен в использовании, но зато он имеет довольно неплохую гибкость и функциональность.

Итак, как его использовать.

// Инициализация
CMeterIcon mi32;
const int nNumBars32 = 3;
const int nLevels32 = 4;

// устанавливаем ограничения (верх-низ) цветных баров
int pLimits32[nLevels32] = {25,35,87,100};

// устанавливаем цвета для каждого уровня
COLORREF pColors32[nLevels32] = 
 {RGB(255,0,0),RGB(255,255,0),RGB(0,255,0),RGB(0,255,255)};

// запускаем
mi32.Init(hFrame32,nMaxVal,nNumBars32,nSpacing,32,32,RGB(0,0,0));

// загружаем информацию о цветах и ограничениях
mi32.SetColorLevels(pLimits32,pColors32,nLevels32);

// создаём массив значений для баров
int pVals32[nNumBars32] = {nVal1,nVal2,nVal3};

// генерируем иконку (используя DestroyIcon() можно удалить иконку)
HICON hIcon32 = mi32.Create(pVals32);

Downloads

Скачать демонстрашку и исходник - 14 Kb