Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 октября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.

Использование иконок.

Создание иконки

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

Пример

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

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

Пример

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 Дисплей
0 0 Чёрный
0 1 Белый
1 0 Экран
1 1 инвертированный экран

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

Отображение иконки

Следующий пример демонстрирует, как нарисовать иконку в клиентской области окна, контекст устройства которого (DC) указан в параметре hdc.

HICON hIcon1;   // дескриптор иконки 
 HDC hdc;        // дескриптор констекста устройства
 
 DrawIcon(hdc, 10, 20, hIcon1); 

Каждому окну в системе присваивается класс иконок. Приложение может на стадии регистрации присвоить окну определённый класс иконок. Так же приложение может заменить иконку присвоенную окна при помощи функции SetClassLong. Следующий пример заменяет класс иконок на иконку с идентификатором ресурса 480.

HINSTANCE hinst;            // дескриптор текущего экземпляра
 HWND hwnd;                  // дескриптор главного окна
 
 
 SetClassLong(hwnd,          // дескриптор окна
     GCL_HICON,              // изменяем иконку
     (LONG) LoadIcon(hinst, MAKEINTRESOURCE(480))
    );

 

Использование ресурсов иконок из других модулей

Ниже приведён пример, который создаёт дескриптор иконки, основанный на иконке из другого исполняемого файла. Для этого используются функции CreateIconFromResourceEx, DrawIcon, и LookupIconIdFromDirectoryEx, а так же некторые функции для работы с ресурсами. В конце иконка отображается в окне.

Пример

HICON hIcon1;       // дескриптор иконки
 HINSTANCE hExe;     // дескриптор закгруженного файла .EXE
 HRSRC hResource;    // дескриптор для FindResource
 HRSRC hMem;         // дескриптор для LoadResource
 BYTE *lpResource;   // указатель на данные ресурса
 int nID;            // ID ресурса, который лучше всего удовлетворяет
                     // текущему экрану
 
 HDC hdc;        // дескриптор констекста устройства
 
 // Загружаем файл, из которого будет скопирована иконка.
 // LoadLibrary должна иметь явный путь.
 //
 hExe = LoadLibrary("myapp.exe");
 if (hExe == NULL)
 {
     //Ошибка загрузки модуля
 	return;
 }
 
 
 // Находим группу иконки, идентификатор которой 440.
 
 hResource = FindResource(hExe,
     MAKEINTRESOURCE(440),
     RT_GROUP_ICON);
 
 // Загружаем и блокируем группу иконки.
 
 hMem = LoadResource(hExe, hResource);
 
 lpResource = LockResource(hMem);
 
 // Get the identifier of the icon that is most appropriate
 // for the video display.
 
 nID = LookupIconIdFromDirectoryEx((PBYTE) lpResource, TRUE,
     CXICON, CYICON, LR_DEFAULTCOLOR);
 
 // Ищем биты для nID иконки.
 
 hResource = FindResource(hExe,
     MAKEINTRESOURCE(nID),
     MAKEINTRESOURCE(RT_ICON));
 
 // Загружаем и блокируем иконку.
 
 hMem = LoadResource(hExe, hResource);
 
 lpResource = LockResource(hMem);
 
 // Создаём дескриптор иконки.
 
 hIcon1 = CreateIconFromResourceEx((PBYTE) lpResource,
     SizeofResource(hExe, hResource), TRUE, 0x00030000,
     CXICON, CYICON, LR_DEFAULTCOLOR);
 
 // Рисуем иконку в клиентской области. 
 
 DrawIcon(hdc, 10, 20, hIcon1); 

 

 



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS