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