- •ОБЩИЕ ПОЛОЖЕНИЯ
- •1 СТРУКТУРА WINDOWS – ПРИЛОЖЕНИЙ. ОКОННАЯ ПРОЦЕДУРА. ОБРАБОТКА СООБЩЕНИЙ. ФАЙЛ РЕСУРСОВ.
- •2 КОНТЕКСТЫ УСТРОЙСТВ. ВЫВОД ТЕКСТА И ГРАФИКИ.
- •3. СРЕДСТВА ВВОДА ИНФОРМАЦИИ
- •4. ДОЧЕРНИЕ ОКНА УПРАВЛЕНИЯ
- •5. МНОГОЗАДАЧНОСТЬ И МНОГОПОТОЧНОСТЬ
- •6. МНОГООКОННЫЙ ИНТЕРФЕЙС
- •7. РАЗРАБОТКА ДИНАМИЧЕСКИ ПОДКЛЮЧАЕМЫХ БИБЛИОТЕК
- •8 ОСНОВЫ ЯЗЫКА АССЕМБЛЕР
- •Регистры общего назначения позволяют обращаться к своим “младшим” частям (см. рис. 1).
- •Таблица 9.1. Флаги состояния
- •Таблица 2. Системные флаги
- •9 ИСПОЛЬЗОВАНИЕ ЯЗЫКА АССЕМБЛЕР
- •11 ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ С# ПОД .NET.
- •СПИСОК ЛИТЕРАТУРЫ
21.Что такое «быстрые клавиши»?
22.Каким образом создаются окна диалога?
23.Объясните отличия модального окна.
2 КОНТЕКСТЫ УСТРОЙСТВ. ВЫВОД ТЕКСТА И ГРАФИКИ.
2.1 Цель работы
Ознакомление с концепцией контекстного представления устройств в современных операционных системах, получение практических навыков по составлению, написанию и отладке программ, осуществляющих аппаратнонезависимый вывод информации на экран дисплея, принтеры, и другие периферийные устройства, представленные контекстами.
Ознакомление с концепцией и элементами графического интерфейса пользователя (GUI), принципами формирования графики на растровом экране дисплея, получение практических навыков по составлению, написанию и отладке программ, осуществляющих графический вывод текста, точечной и векторной графики.
2.2 Указания по подготовке к выполнению лабораторной работы
Необходимо освоить основные принципы контекстной концепции представления устройств вывода информации, структуру данных контекстов, а также порядок использования основных фулнкций работы с контекстами устройств. Необходимо изучить концепцию графического интерфейса устройства (GDI), его структуру, основные типы функций и примитивов GDI, структуру информации о цветах, атрибутах, шрифтах контекста устройств, принципы их формирования и изменения.
При подготовке к работе необходимо изучить конспект лекций по указанной теме, методические указания, а также разделы, указанные в [16, c.57-62], [17, c.28-32], [16, c.94-247], [17, c.19-32].
2.3 Обзор темы работы
Контекст устройства фактически является структурой данных, которая внутренне поддерживается GUI. Контекст устройства связан с конкретным устройством вывода информации, таким как дисплей, принтер, плоттер. Некоторые значения в контексте устройства являются графическими "атрибутами", которые определяют некоторые особенности работы функций рисования. Например, для функции TextOut, эти атрибуты задают цвет текста, цвет фона, положение в окне при выводе и т.п.
Перед осуществлением вывода, программа должна получить описатель контекста, все операции по выводу осуществлять с использованием описателя контекста, после чего, программа должна освободить описатель контекста.
Вданной работе необходимо использовать следующие функции API: BeginPaint или GetDC для получения описателя контекста устройства и EndPaint или ReleaseDC для его уничтожения.
Следует отметить, что при вызове BeginPaint и EndPaint обновляет фон рабочей области и устанавливает рабочую область в действительное состояние.
Получение рабочей области окна можно выполнить при помощи функции GetClientRect. При этом, использовать контекст, полученный при помощи BeginPaint, можно только для рисования в рабочей области окна.
Вывод текста можно осуществлять при помощи функций TextOut и DrawText. Информация о системных параметрах получается при помощи функций GetTextMetrics и GetSystemMetrcs.
Для рисования в рабочей области вашего окна используйте функции графического интерфейса устройства GDI. Одна из основных задач GDI – поддержка аппаратно-независимой графики. Функции GDI позволяют манипулировать как с пиксельной, так и векторной графикой.
Всвоей основе функции GDI могут быть разбиты на несколько крупных
групп.
Функции, которые получают (или создают) и освобождают (или уничтожают) указатели контекстов устройств. Данные функции подробно рассматривались в п.3 данных методических указаний.
Функции, которые получают информацию о контекстах устройства (см. выше).
Функции рисования. Наиболее часто используемые из них – MoveToEx (перемешение пера в новые координаты), LineTo (рисование линии), PolyLineTo (рисует ломаную линию по координатам точек), Rectangle (рисует прямоугольник), Ellipse (рисует эллипс), PolyBezier (рисует сплайны Безье), функции работы с полигонами – Polygon, CreateRectRgn, CreateEllipticRgn, CreatePolygonRgn, CombineRgn, FillRgn, FrameRgn, функции работы с битовыми образами – CreateDIBitmap, SetDIBitmap, GetDIBits, CreateBitmap, SetBitmapBits, BitBlt, StretchBlt, PatBlt.
Функции, которые устанавливают и получают атрибуты контекста устройства, которые устанавливают различные особенности работы функций рисования. Например, SetTextColor, SetTextAlign.
Функции, которые работают с объектами GDI. К ним относятся функ-
ции работы с перьями (CreatePen, CreatPenIndirect), фоном (SetBkColor,GetBkColor, CreateSolidBrush, CreateHatchBrush, CreateBrushIndirect), функции управления объектами: GetStockObject, SelectObject, Delete-
Object.
Пользуясь данными функциями можно работать со следующими типами графических объектов (примитивами):
Линии и кривые. GDI поддерживает прямые линии, прямоугольники, эллипсы, дуги, сплайны Безье.
Закрашенные области. Если набор прямых и кривых линий ограничивает со всех сторон некоторую область, то она может быть закрашена с использованием объекта GDI «кисть» (brush). Эта кисть может быть сплошной, штриховой или шаблонной.
Битовые (растровые) образы – двумерные массивы битов, соответствующие пикселям устройства отображения. Битовые образы используются для отображения картинок, курсоров мыши, иконок, кнопок панели инструментов и т.п.
Текст. Операционная система поддерживает множество функций работы с текстом, шрифтами.
Метафайлы – набор вызовов команд GDI, сохраненный в файловом виде. Используются для хранения и передачи векторной графики.
Регион – сложная область, состоящая из любых фигур.
Путь – набор отрезков и кривых. Могут использоваться для рисования, закрашивания и при отсечении.
Отсечение – некоторая область, ограничивающая пространство для графического вывода.
Палитра – набор цветов для рисования.
2.4 Задание на лабораторную работу
Вариант 1.
Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике.
Информация о метрике: ширину и высоту экрана в пикселях, ширину и высоту горизонтальной полосы прокрутки.
Информация об устройстве: ширину и высоту (в миллиметрах) монитора. Информация о шрифте: высоту шрифта и величину пространства над сим-
волом для специальный знаков.
Написать программу, рисующую четыре прямоугольника в клиентской области окна, которые делят его на четыре равные части. При изменении размеров окна, следует перерисовать прямоугольники, вычислив их новые размеры.
Вариант 2.
Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:
Информация о метрике: ширину и высоту иконки приложения, ширину и высоту рамки окна приложения.
Информация об устройстве: ширину и высоту (в пикселях) монитора. Информация о шрифте: усредненное значение символов, величину меж-
строкового расстояния.
Создать окно приложения в центре рабочего стола со следующими размерами: ширина 600, высота 450 точек. В центре окна нарисовать закрашенный эллипс со значениями диагоналей 250 и 100 точек. Вокруг эллипса описать пятиугольник. При изменении размеров окна, происходит пропорциональное изменение рисунка.
Вариант 3.
Написать, с использованием функций API программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:
Информация о метрике: ширину и высоту курсора, ширину и высоту иконки приложения.
Информация об устройстве: ширину и высоту (в пикселях) монитора. Информация о шрифте: высоту символов, усредненную ширину символа
строки.
Используя сплайны Безье, нарисовать в клиентской области окна приложения графики функций "синуса" и "косинуса". Каждый из графиков, а также оси координат должны быть разного цвета.
Вариант 4.
Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:
Информация о метрике: минимальную и максимальную ширину иконки, высоту и ширину меню.
Информация об устройстве: действительное цветовое разрешение. Информация о шрифте: высоту символов, ширину самого широкого сим-
вола.
Написать программу рисования графика функции, определяемой пользователем. Уравнение задается в виде функции, диапазон изменения аргумента задается константой. Программа автоматически определяет масштаб и выводит график функции таким образом, чтобы все значения функции были выведены в пределах окна приложения.
Вариант 5.
Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:
Информация о метрике: наличие мыши в системе и число кнопок у мыши, минимальную и максимальную ширину иконки.
Информация об устройстве: ширину и высоту (в пикселях) монитора. Информация о шрифте: высоту шрифта, ширину самого широкого симво-
ла.
Нарисовать в клиентской области окна приложения несколько фигур (прямоугольники – 2 шт., эллипсы – 2 шт., полигоны). Написать алгоритм закраши-
вания всех, полученных в результате этого, областей. Каждая область закрашивается своим оригинальным цветом и штриховкой.
Вариант 6.
Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:
Информация о метрике: величину прямоугольника, попадая в который засчитывается двойной щелчок мыши, наличие мыши в системе и число кнопок у мыши.
Информация об устройстве: ширину и высоту (в миллиметрах) монитора. Информация о шрифте: высоту шрифта и величину межстрокового рассто-
яния.
Написать программу, заполняющую клиентскую область окна приложения разноцветными квадратами одного размера. При изменении размеров окна, происходит перерисовка, причем количество квадратов зависит от размеров окна.
Вариант 7.
Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:
Информация о метрике: величину прямоугольника, попадая в который засчитывается двойной щелчок мыши, минимальную и максимальную ширину иконки.
Информация об устройстве: ширину и высоту (в пикселях) монитора. Информация о шрифте: усредненную величину символа строки и величину
пространства над символом для специальный знаков.
Нарисовать в клиентской области окна приложения несколько фигур (прямоугольники, эллипсы, полигоны). Написать алгоритм закрашивания всех, полученных в результате этого, областей. Каждая область закрашивается своим оригинальным цветом и штриховкой. С помощью кривых создать схематический график функции, оси координат и график должны быть разного цвета.
Вариант 8.
Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:
Информация о метрике: ширина и высота иконки приложения, ширина и высота вертикальной полосы прокрутки.
Информация об устройстве: действительное цветовое разрешение. Информация о шрифте: ширину самого широкого символа, высоту шриф-
та.
Используя пути, написать программу, рисующую замкнутую фигуру, заданную преподавателем, закрашенную заданным фоном и штриховкой.
Вариант 9.
Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:
Информация о метрике: высоту полосы меню, высоту заголовка, наличие мыши в системе и количество кнопок мыши.
Информация об устройстве: действительное цветовое разрешение. Информация о шрифте: усредненную ширину символа строки и ширину
самого широкого символа.
Написать алгоритм закрашивания произвольной области экрана, ограниченной непрерывным контуром, заданным преподавателем. Начало закраски определяется произвольной точкой внутри контура.
Вариант 10.
Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:
Информация о метрике: величину прямоугольника, попадая в который засчитывается двойной щелчок мыши, высота и ширина курсора.
Информация об устройстве: действительное цветовое разрешение. Информация о шрифте: высоту шрифта, величину межстрокового расстоя-
ния.
Используя пути, написать программу, рисующую замкнутую фигуру, заданную преподавателем, закрашенную заданным фоном и штриховкой
2.5. Контрольные вопросы и задания
1.Дайте определение контекста устройства.
2.Раскройте суть понятия «описатель контекста устройства». Для чего он предназначен?
3.Какими способами можно получить описатель контекста устройства?
4.Чем отличается использование функций GetDC, ReleaseDC и BeginPaint, EndPaint?
5.Каким образом можно изменить шрифт, используемый в данном контексте?
6.В чем отличие растровых шрифтов и шрифтов «true type»?
7.Какие атрибуты контекста устройства и текста Вы знаете?
8.Что такое «кисть» и «фон»? Для чего они предназначены и каким образом они задаются?
9.Какие функции вывода текста Вы знаете?
10.Дайте характеристику метрическим параметрам текста. Каким образом получить информацию о текущих метрических параметрах текста?
11. Что понимается под рабочей и клиентской областью окна приложения? 12.Каково назначение графического интерфейса устройства (GDI)?