Win32 API. Пиктограммы - Создание пиктограммы

ОГЛАВЛЕНИЕ

Создание пиктограммы

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

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

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

HICON hIcon3;      // дескриптор пиктограммы
// светлая(yang) битовая маска AND пиктограммы

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

// Светлая (yang) битовая маска XOR пиктограммы

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 применяет следующую таблицу истинности битовым маскам XOR и AND.

AND битовая маска XOR битовая маска Изображение
0 0 Черное
0 1 Белое
1 0 Экранное
1 1 Противоположное экранному

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