8. Вывод информации в окно. Механизм перерисовки окна.
При внимательном рассмотрении можно увидеть, что экран дисплея составлен из тонких горизонтальных и вертикальных линий. На пересечении каждой горизонтальной и вертикальной линии находится точка, называемая Пикселом. Пиксел — это минимальный по размерам изобразительный элемент, которым может управлять приложение. В свою очередь, пиксел образован тремя микроточками, не различимыми невооруженным глазом, которые имеют, соответственно, красный, зеленый и синий цвета. Микроточки могут светиться с интенсивностью от 0 (отсутствие излучения) до 255 (максимальная яркость). Совокупность их свечения образует текущий цвет пиксела.
Таким образом, цвет пиксела можно рассматривать как некоторую точку в трехмерном RGB-пространстве, образованном тремя цветовыми осями: Red (красная цветовая составляющая), Green (зеленая составляющая) и Blue (синяя составляющая). В компьютерной графике используются и другие цветовые пространства. Например, для цветных принтеров чаще используется цветовое пространство CMYK, в котором каждый цвет является комбинацией голубой, малиновой, желтой и черной составляющих.
Вывод пикселов:
Для работы с пикселами предусмотрены следующие функции:
COLORREF GetPixel(HDC hdc, int X, int Y);
BOOL SetPixelV(HDC hdc, int X, int Y, COLORREF color);
COLORREF SetPixel(HDC hdc, int X, int Y, COLORREF color);
Параметры Х и Y определяют позицию пиксела в логических единицах. Параметр color, устанавливающий цвет пиксела, обычно задается при помощи макроса RGB. Функция GetPixel возвращает цветовое значение пиксела с заданными координатами. Функции SetPixelV и SetPixel устанавливают заданное цветовое значение пиксела, различаясь возвращаемым значением. Первая функция возвращает логическое значение, указывающее, успешно ли прошла операция. Вторая функция в случае успешного выполнения возвращает старый цвет пиксела, а если произошла какая-то ошибка, то возвращается значение -1. Хронометраж процесса выполнения этих функций показал, что процесс вывода одного пиксела требует более 1000 тактов работы процессора. Как ни странно, функция GetPixel работает еще медленнее и требует более 6000 тактов работы процессора. Поэтому, если рисование ведется посредством вывода отдельных пикселов, могут возникнуть проблемы с быстродействием программы.
Вывод текста:
Win32 GDI обеспечивает полный набор функций для форматирования и рисования текста в клиентской области окна или на бумажной странице принтера. Эти функции могут быть разделены на те, которые форматируют текст, подготавливая его для вывода, и те, которые действительно отображают текст. Форматирующие функции выравнивают текст, устанавливают межсимвольные промежутки, изменяют протяженность разделительных символов, устанавливают цвет текста и цвет фона графических элементов. Рисующие функции выводят отдельные символы или целые строки текста.
Перерисовка:
Обычно приложение рисует что-либо в окне, реагируя на сообщение WM_PAINT. Система посылает это сообщение окну во всех случаях, требующих перерисовки клиентской области окна. Например, типичными причинами генерации этого сообщения могут быть следующие события: изменились размеры или местоположение окна; клиентская область была частично или полностью закрыта другим окном или выпадающим меню, а теперь закрывающий объект исчез; приложение вызвало одну из функций работы с полосами прокрутки. Кроме того, приложение может само инициировать посылку сообщения WM_PAINT посредством вызова одной из функций, InvalidateRect, InvalidateRgn или UpdateWindow. Функция UpdateWindow посылает сообщение WM_PAINT непосредственно в оконную процедуру, минуя очередь приложения. Работа с сообщением WM_PAINT требует от разработчика понимания общей парадигмы отображения графики на экране, которая принята в системах семейства Windows. Желательно структурировать программу таким образом, чтобы информация, необходимая для рисования в клиентской области, готовилась там, где это удобно с точки зрения реализуемого алгоритма. Но само рисование должно выполняться только тогда, когда появляется сообщение WM_PAINT. Впрочем, иногда решаемая задача диктует и другие подходы к рисованию: например, оно может выполняться при обработке сообщений от мыши или от таймера.
Yandex.RTB R-A-252273-3
- Модель программного интерфейса ос windows. Понятие объекта ядра и описателя объекта ядра операционной системы Windows. Нотация программного интерфейса.
- Понятие пользовательского режима и режима ядра операционной системы Windows. Модель виртуальной памяти процесса в пользовательском режиме и в режиме ядра операционной системы Windows.
- Обзор архитектуры и основных модулей операционной системы Windows.
- Системный реестр операционной системы Windows.
- 5. Основные элементы программ с оконным пользовательским интерфейсом. Минимальная программа для ос Windows с окном на экране. Создание и отображение окна.
- Понятие оконного сообщения. Источники сообщений. Очередь сообщений. Цикл приема и обработки сообщений. Процедура обработки сообщений.
- 8. Вывод информации в окно. Механизм перерисовки окна.
- 9. Принципы построения графической подсистемы ос Windows. Понятие контекста устройства. Вывод графической информации на физическое устройство.
- 10. Рисование геометрических фигур. Графические инструменты. Управление цветом. Палитры цветов.
- 11. Растровые изображения. Вывод растровых изображений. Значки и курсоры. Вывод растровых изображений с эффектом прозрачного фона.
- 12. Вывод текста. Логические и физические шрифты.
- 13. Системы координат. Трансформации. Режимы масштабирования.
- 14. Понятие ресурсов программ. Виды ресурсов. Работа с ресурсами. Меню. Окна диалога.
- 15. Понятие динамически подключаемой библиотеки. Структура dll-библиотеки. Создание dll-библиотеки. Использование dll-библиотеки в программе. Статический и динамический импорт.
- 16. Отображение файлов в память.
- 17. Организация многозадачности в операционной системе Windows. Понятие процесса и потока. Контекст потока. Создание и завершение процессов и потоков.
- 18. Механизм приоритетов в операционной системе Windows. Класс приоритета процесса. Относительный приоритет потока. Базовый и динамический приоритеты потока.
- 19. Синхронизация потоков в пределах одного процесса. Критические секции. Спин-блокировки. Interlocked-функции.
- 20. Синхронизация потоков разных процессов. Объекты синхронизации: флаги, семафоры, события, ожидаемые таймеры, именованные и неименованные «трубы» (каналы).
- 21. Синхронизация потоков при создании общих данных с помощью двойных проверок (double-checked locking).
- 22. Синхронизация потоков с помощью мониторов Хоара.
- 24. Структуры данных общего назначения в режиме ядра. Представление строк стандарта Unicode. Представление двусвязных списков.
- 25. Понятие прерывания, исключения и системного вызова.
- 26. Аппаратные и программные прерывания. Таблица обработчиков прерываний. Понятие процедуры обработки прерываний (isr).
- 27. Программируемый контролер прерываний. Уровни прерываний. Механизм вызова прерываний. Функция KeBugCheckEx.
- 28. Исключения. Механизм обработки исключения.
- 29. Системные вызовы. Выполнение системного вызова.
- 30. Понятие отложенной процедуры (dpc). Назначение отложенных процедур.
- 31. Понятие асинхронной процедуры (apc). Назначение асинхронных процедур. Асинхронные процедуры режима ядра и пользовательского режима.
- 32. Понятие рабочего элемента ядра (Work Item). Назначение рабочих элементов.
- 33. Пулы памяти. Пул подкачиваемой памяти, пул неподкачиваемой памяти, пул сессии, особый пул. Тегирование пулов. Структура данных пула.
- 34. Оптимизация использования оперативной памяти с помощью списков предыстории (look-aside lists).
- 35. Блокирование страниц в памяти. Списки описателей памяти (mdl) и их использование
- 36. Представление объекта ядра в памяти. Менеджер объектов.
- 37. Структура драйвера операционной системы Windows. Точки входа в драйвер.
- 38. Объект, описывающий драйвер. Объект, описывающий устройство. Объект, описывающий файл. Взаимосвязь объектов.
- 39. Запрос ввода-вывода (irp). Схема выполнения ввода-вывода в стеке драйверов.
- 40. Структура api ядра ос Windows: Kernel api, Windowing api, Messaging api. Функции ZwXxx/NtXxx в пользовательском режиме и в режиме ядра.
- 42. Перехват функций ос Windows api в пользовательском режиме. Интерфейсный модуль ntdll.Dll.
- 43. Перехват вызова функций ос Windows в режиме ядра. Встроенная защита от перехвата в новейших версиях ос Windows.