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

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

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 битовая маскаИзображение
00Черное
01Белое
10Экранное
11Противоположное экранному

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


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Владимир Соковиков - 27.06.2002