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


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

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

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. Вам нет необходимости уничтожить пиктограммы, созданные другими функциями.

 
« Предыдущая статья   Следующая статья »