WinPro logo. Перейти на сайт www.winpro.narod.ru

Пример создания пиктограммы



Для использования какой-либо пиктограммы приложение должно получить ее описатель. Ниже показано создание двух разных описателей: первая - стандартный знак вопроса, вторая - личная пиктограмма приложения находящееся в ресурсной части его исполняемого файла.
HICON hIcon1;   // описатель пиктограммы
HICON hIcon2;   // описатель пиктограммы
 
// Создание стандартной вопросительной пиктограммы.
 
hIcon1 = LoadIcon(NULL, IDI_QUESTION); 
 
// Создание личной пиктограммы на основе ресурса.
 
hIcon2 = LoadIcon(hinst, MAKEINTRESOURCE(460)); 
 
// Создание личной пиктограммы во время исполнения
// приложения.

Создание пиктограмм, используя функцию LoadIcon или LoadImage предпочтительнее, чем создание ее напрямую в приложении функцией CreateIconIndirect. Использование ресурса пиктограммы позволяет избежать аппаратной зависимости, упрощает локализацию и делает пиктограмму доступной всем приложениям (разделяемый ресурс). На этом примере можно посмотреть, как система интерпретирует маску прозрачности для биткарты пиктограммы.

HICON hIcon3;      // описатель пиктограммы
 
// 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 
 
// 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 использует следующую таблицу истинности для AND и XOR битмасок:
AND маскаXOR маскаОтображение
00черный
01белый
10цвет экрана
11обратить цвет экрана

Hosted by uCoz