Чтобы использовать значок, ваше приложение должно получить дескриптор значка. Нижеследующий пример показывает, как создать два различных дескриптора значка: один для стандартного значка в форме знака восклицания, а другой для пользовательского значка, включенного как ресурс в определяющий ресурс файл приложения.
Демонстрационный пример
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. Нет необходимости разрушить значки, созданные другими функциями.