Создание значка (пример)

Чтобы использовать значок, ваше приложение должно получить дескриптор значка. Нижеследующий пример показывает, как создать два различных дескриптора значка: один для стандартного значка в форме знака восклицания, а другой для пользовательского значка, включенного как ресурс в определяющий ресурс файл приложения.

Демонстрационный пример

HICON hIcon1;   // дескриптор значка
HICON hIcon2;   // дескриптор значка 
 
// Создадим стандартный значок в форме знака вопроса. 
 
hIcon1 = LoadIcon(NULL, IDI_QUESTION); 
 
// Создадим пользовательский значок, основанный на ресурсе. 
 
hIcon2 = LoadIcon(hinst, MAKEINTRESOURCE(460)); 
 
// Создайте пользовательский значок во время выполнения программы.

Приложение должно реализовывать пользовательские значки как ресурсы и должно использовать функцию LoadIcon или LoadImage, а не создавать значки во время выполнения. Этот подход помогает избежать зависимости от устройства, упрощает локализацию программ (адаптацию к национальным языкам) и дает возможность приложениям совместно использовать точечные рисунки для значка. Однако, нижеследующий пример использует функцию CreateIcon, чтобы создать пользовательский значок во время выполнения программы, основываясь на растровых битовых масках; пример включается для того, чтобы иллюстрировать, как система интерпретирует битовые маски точечного рисунка значка.

Демонстрационный пример

HICON hIcon3;      // дескриптор значка
 
// Битовая маска AND(И) значка Янь (Yang) 
 
BYTE ANDmaskIcon[] = {0xFF, 0xFF, 0xFF, 0xFF,   // строка 1 
                      0xFF, 0xFF, 0xC3, 0xFF,   // строка 2 
                      0xFF, 0xFF, 0x00, 0xFF,   // строка 3 
                      0xFF, 0xFE, 0x00, 0x7F,   // строка 4 
 
                      0xFF, 0xFC, 0x00, 0x1F,   // строка 5 
                      0xFF, 0xF8, 0x00, 0x0F,   // строка 6 
                      0xFF, 0xF8, 0x00, 0x0F,   // строка 7 
                      0xFF, 0xF0, 0x00, 0x07,   // строка 8 
 
                      0xFF, 0xF0, 0x00, 0x03,   // строка 9 
                      0xFF, 0xE0, 0x00, 0x03,   // строка 10 
                      0xFF, 0xE0, 0x00, 0x01,   // строка 11 
                      0xFF, 0xE0, 0x00, 0x01,   // строка 12 
 
                      0xFF, 0xF0, 0x00, 0x01,   // строка 13 
                      0xFF, 0xF0, 0x00, 0x00,   // строка 14 
                      0xFF, 0xF8, 0x00, 0x00,   // строка 15 
                      0xFF, 0xFC, 0x00, 0x00,   // строка 16 
 
                      0xFF, 0xFF, 0x00, 0x00,   // строка 17 
                      0xFF, 0xFF, 0x80, 0x00,   // строка 18 
                      0xFF, 0xFF, 0xE0, 0x00,   // строка 19 
                      0xFF, 0xFF, 0xE0, 0x01,   // строка 20 
 
                      0xFF, 0xFF, 0xF0, 0x01,   // строка 21 
                      0xFF, 0xFF, 0xF0, 0x01,   // строка 22 
                      0xFF, 0xFF, 0xF0, 0x03,   // строка 23 
                      0xFF, 0xFF, 0xE0, 0x03,   // строка 24 
 
                      0xFF, 0xFF, 0xE0, 0x07,   // строка 25 
                      0xFF, 0xFF, 0xC0, 0x0F,   // строка 26 
                      0xFF, 0xFF, 0xC0, 0x0F,   // строка 27 
                      0xFF, 0xFF, 0x80, 0x1F,   // строка 28 
 
                      0xFF, 0xFF, 0x00, 0x7F,   // строка 29 
                      0xFF, 0xFC, 0x00, 0xFF,   // строка 30 
                      0xFF, 0xF8, 0x03, 0xFF,   // строка 31 
                      0xFF, 0xFC, 0x3F, 0xFF};  // строка 32 
 
// Битовая маска XOR (исключающее ИЛИ) значка Инь (Yang) 
 
BYTE XORmaskIcon[] = {0x00, 0x00, 0x00, 0x00,   // строка 1 
                      0x00, 0x00, 0x00, 0x00,   // строка 2 
                      0x00, 0x00, 0x00, 0x00,   // строка 3 
                      0x00, 0x00, 0x00, 0x00,   // строка 4 
 
                      0x00, 0x00, 0x00, 0x00,   // строка 5 
                      0x00, 0x00, 0x00, 0x00,   // строка 6 
                      0x00, 0x00, 0x00, 0x00,   // строка 7 
                      0x00, 0x00, 0x38, 0x00,   // строка 8 
 
                      0x00, 0x00, 0x7C, 0x00,   // строка 9 
                      0x00, 0x00, 0x7C, 0x00,   // строка 10 
                      0x00, 0x00, 0x7C, 0x00,   // строка 11 
                      0x00, 0x00, 0x38, 0x00,   // строка 12 
 
                      0x00, 0x00, 0x00, 0x00,   // строка 13 
                      0x00, 0x00, 0x00, 0x00,   // строка 14 
                      0x00, 0x00, 0x00, 0x00,   // строка 15 
                      0x00, 0x00, 0x00, 0x00,   // строка 16 
 
                      0x00, 0x00, 0x00, 0x00,   // строка 17 
                      0x00, 0x00, 0x00, 0x00,   // строка 18 
                      0x00, 0x00, 0x00, 0x00,   // строка 19 
                      0x00, 0x00, 0x00, 0x00,   // строка 20 
 
                      0x00, 0x00, 0x00, 0x00,   // строка 21 
                      0x00, 0x00, 0x00, 0x00,   // строка 22 
                      0x00, 0x00, 0x00, 0x00,   // строка 23 
                      0x00, 0x00, 0x00, 0x00,   // строка 24 
 
                      0x00, 0x00, 0x00, 0x00,   // строка 25 
                      0x00, 0x00, 0x00, 0x00,   // строка 26 
                      0x00, 0x00, 0x00, 0x00,   // строка 27 
                      0x00, 0x00, 0x00, 0x00,   // строка 28 
 
                      0x00, 0x00, 0x00, 0x00,   // строка 29 
                      0x00, 0x00, 0x00, 0x00,   // строка 30 
                      0x00, 0x00, 0x00, 0x00,   // строка 31 
                      0x00, 0x00, 0x00, 0x00};  // строка 32 
 
hIcon3 = CreateIcon(hinst,    // экземпляр приложения  
             32,              // ширина значка 
             32,              // высота значка 
             1,               // число плоскостей XOR 
             1,               // число бит на пиксель 
             ANDmaskIcon,     // битовая маска AND  
             XORmaskIcon);    // битовая маска XOR 

Чтобы создать значок, CreateIcon применяет нижеследующую таблицу истинности к битовым маскам AND и XOR.

Битовая маска AND Битовая маска XOR Показ на экране
0 0 Черный
0 1 Белый
1 0 Цвет экрана
1 1 Противоположный цвету экрана

Перед закрытием, ваше приложение должно использовать функцию DestroyIcon, чтобы разрушить любой значок, который был создан при помощи использования CreateIconIndirect. Нет необходимости разрушить значки, созданные другими функциями.

Назад в оглавление
На главную страницу

Hosted by uCoz