
- •Вопрос 77. Требования к программному и аппаратному обеспечению Windows приложений. Требования к программному обеспечению. Требования к аппаратуре.
- •Вопрос 78. Доступ к оболочке Windows. Система координат. Основные режимы отображения. Координаты устройства.
- •Вопрос 79. Доступ к оболочке Windows. Поля вывода. Изменение пределов поля вывода и окна. Координаты, определяемые пользователем. Выбор начальных атрибутов окна.
- •Вопрос 80. Вывод окна. Изменение вида окна. Часто используемые элементы управления и диалоговые окна. Статические элементы управления. Элементы управления - кнопки.
- •Модальная диалоговая панель
- •Немодальная диалоговая панель
- •Элементы управления
Вопрос 77. Требования к программному и аппаратному обеспечению Windows приложений. Требования к программному обеспечению. Требования к аппаратуре.
(Этот вопрос, если найду информацию, переделаю. Пока что тут какая-то ерунда)
Windows является многозадачной средой и каждое приложение для своей работы требует некоторых ресурсов системы — дискового пространства, оперативной памяти, времени процессора, устройств ввода и вывода информации и пр. Соответственно Windows должен выполнять функции арбитра, осуществляющего разделение ресурсов между приложениями и контролирующего корректность работы приложений с выделенными им ресурсами. Для того, что бы Windows мог успешно разделять ресурсы, на разрабатываемые программы накладывают ряд требований. Например, требование не использования аппаратуры непосредственно. Вы можете использовать только средства Windows для выполнения всех своих задач, но не осуществлять доступ к аппаратуре непосредственно. Например, приложение не должно обращаться к видеопамяти, средствам BIOS и т.д. Если приложение должно вывести на дисплей какое–либо изображение оно обязано воспользоваться существующими функциями Windows.
К основным разделяемым ресурсам относятся дисплей, клавиатура, мышь, оперативная память, процессор и диск. Для разделения дисплея между разными задачами в Windows используются окна (window). Каждой задаче назначено, по меньшей мере, одно окно, и осуществлять вывод приложение может только в это окно. Приложение может обладать несколькими окнами. В этом случае, обычно, одно окно является родительским (parent), а другие являются дочерними (child) окнами по отношению к родительскому окну. В Windows также реализована основная логика использования перекрывающихся окон. Для разделения дискового пространства используется файловая система. Для доступа к файлам Windows предоставляет свои собственные функции. Разделение памяти. В Windows NT используется так называемая виртуальная память. Для каждого запущенного приложения выделяется собственное адресное пространство, размером 4Г, которым приложение владеет монопольно. В этом пространстве не находится никаких данных или кода других приложений. Таким образом приложения изолированы друг от друга. Адресное пространство приложения делится на отдельные фрагменты, содержащие код, данные, служебную информацию и пр., необходимые для этого приложения. Помимо этого в адресном пространстве приложения могут выделяться одна или несколько куч (хипов), разделяемых на отдельные блоки. Вот эти–то блоки могут перемещаться внутри своей кучи и даже удаляться из памяти. Сама куча в адресном пространстве приложения перемещаться не будет. Для каждого приложения выделяется по меньшей мере одна куча, называемая стандартной (default heap).
Вопрос 78. Доступ к оболочке Windows. Система координат. Основные режимы отображения. Координаты устройства.
Работа с графическими устройствами, такими, как принтер, плоттер, дисплей в системе Windows является аппаратно-независимой. Это значит, что при программировании под Windows средств прямого доступа к аппаратуре нет. Все взаимодействие с ней производится через функции API (Application Program Interface). При этом для вывода на графические устройства используется один и тот же набор функций.
Для того, чтобы определить, на какое устройство осуществляется вывод, в Windows используется понятие контекста устройства (device context). Контекст устройства - это структура данных, связанная с тем или иным устройством ввода/вывода. Контекст устройства определяет различные параметры, используемые при работе с устройством.
При выводе многие параметры долгое время остаются неизменными, например, цвет линии и другие. Указывать все такие параметры при каждом обращении к методам вывода неудобно. Контекст устройства содержит целый ряд таких параметров, обычно их называют атрибутами контекста устройства.
Системы координат
Вывод на графическое устройство привязан к некоторой системе координат. Практически все методы, обеспечивающие вывод на графическое устройство, привязаны к логической (или оконной) системе координат. В этой системе координаты называют логическими.
Логическая система координат
Под типом логической системы координат понимается то, как направлены координатные оси и каковы единицы измерения по каждой из координатных осей. В Windows существует несколько типов логических систем координат.
Для установки типа системы координат используется метод контекста устройства SetMapMode (), а для получения типа системы координат - метод GetMapMode ().
Режимы отображения
В процессе вывода изображения функции графического интерфейса GDI преобразуют логические координаты в физические. Для определения способа такого преобразования используется атрибут с названием режим отображения (mapping mode), который хранится в контексте устройства вывода.
Для указания режима отображения в файле windows.h определены символьные константы с префиксом MM_ (от Mapping Mode - режим отображения).
Восемь существующих режимов отображения координат задаются с помощью символьных констант, определенных в файле Wingdi.h:
#define MM_TEXT // 1 лог. ед. - 1 пиксел
#define MM_LOMETRIC // 1 лог. ед. - 0,1 мм
#define MM_HIMETRIC // 1 лог. ед. - 0,01 мм
#define MM_LOENGLISH // 1 лог. ед. - 0,01 дюйма
#define MM_HIENGLISH // 1 лог. ед. - 0,001 дюйма
#define MMJTWIPS //1 лог. ед. - 1/1440 дюйма
//========== Преобразования по формуле ==========//
#define MM_ISOTROPIC // Растяжение одинаково
#define MM_ANISOTROPIC // Растяжение различно
По умолчанию действует режим ММ_ТЕХТ, в котором ось Y имеет направление сверху вниз. Последующие пять режимов предполагают, что ось Y направлена снизу-вверх.
Очень интересны режимы отображения MM_ISOTROPIC и MM_ANISOTROPIC. Оба этих режима отображения используются в основном, когда программисту требуется построить максимально большое изображение внутри окна, которое будет часто изменять свои размеры.
Если необходимо, чтобы рисунок сохранял свои пропорции, нужно использовать режим MM_ISOTROPIC.
Если необходимо растянуть рисунок так, чтобы он занимал все доступное пространство, нужно использовать режим MM_ANISOTROPIC.
Если необходимо, чтобы рисунок сохранял свои размеры независимо от размера окна, нужно использовать любой другой режим отображения.
Пример вывода строки текста с использованием логических координат (10, 20):
TextOut (hdc, 10, 20, "Сообщение WM_PAINT", 18);
TextOut –функция вывода окна
HDC hdc; - индекс контекста устройства
Свойства системы координат можно менять. Описание логической системы координат задается контекстом устройства. Чтобы логические координаты могли интерпретироваться физическим устройством, используется следующий механизм.
Графическое устройство имеет свою собственную фиксированную физическую систему координат. Контекст устройства содержит атрибуты, задающие соответствие между логическими и физическими координатами точки, что позволяет при выводе на графическое устройство произвести преобразование логических координат в физические. Графическое устройство осуществляет вывод в прямоугольную область отображения (viewport). Начало системы координат находится в левом верхнем углу области, первая координатная ось (Х) направлена горизонтально слева направо, вторая - Y вертикально сверху вниз. Единицей измерения является пиксел.
При выводе на дисплей в системе Windows существует как бы три графических устройства, зависящих от типа экранной области, в которую осуществляется вывод. Вывод может производиться:
на экран, и тогда область отображения - весь экран;
в Windows-окно, и тогда область отображения - все Windows-окно;
в клиентскую часть Windows-окна, и тогда область отображения - клиентская часть Windows-окно.
Для каждого из этих графических устройств можно создать свой тип контекста устройства.
Тип логической системы координат (mapping mode) является атрибутом контекста устройства. Соответствие между системой координат области отображения и логической системой координат окна задается атрибутами:
выделенная точка окна (window origin);
выделенная точка области отображения (viewport origin);
меры протяженности логической (оконной) системы (window extent);
меры протяженности области отображения (viewport extent).
Используя эти атрибуты, Windows преобразует логические координаты в физические и выводит на графическое устройство.
Каждая из систем координат имеет свою выделенную точку. Выделенная точка логической системы координат определяется атрибутом window origin (выделенная точка окна), а выделенная точка физической системы координат - атрибутом viewport origin (выделенная точка области отображения). Соответствие устанавливается наложением двух систем так, чтобы выделенные точки совпадали. Выделенные точки задают, каким образом системы координат размещены одна относительно другой.
Работа с выделенными точками обеспечивается методами класса CPoint:
выделенная точка логической системы координат устанавливается методом SetWindowOrg, а получается методом GetWindowOrg;
выделенная точка физической системы координат устанавливается методом SetViewportOrg, а получается методом GetViewportOrg.
Для систем координат типа MM_TEXT, MM_LOMETRIC, MM_HIMETRIC, MM_LOENGLISH, MM_HIENGLISH, MM_TWIPS выделенные точки полностью задают соответствие. Значение двух других атрибутов соответствия для этих типов систем координат фиксированы и не могут меняться программистом.
Соответствие между логическими и физическими координатами точки можно выразить формулами:
xViewPort = (xWindow - xWinOrg) * xScale + xViewOrg ,
yViewPort = (yWindow - yWinOrg) * yScale + yViewOrg ,
где (xViewPort, yViewPort) - координаты произвольной точки А в физической системе; (xWindow, yWindow) - координаты произвольной точки А в логической системе; (xViewOrg, yViewOrg) - координаты выделенной точки в физической системе; (xWinOrg, yWinOrg) - координаты выделенной точки в логической системе.
Значение xScale равно количеству пикселей, приходящихся на одно деление оси X, а yScale - количеству пикселей, приходящихся на одно деление по оси Y.
Эти значения задаются атрибутами меры протяженности логической системы координат (window extents) и меры протяженности физической системы координат (viewport extents).
Для всех выше перечисленных типов систем координат они фиксированы для данного физического устройства, и программист не может их изменить. Иначе дело обстоит с системами координат типа MM_ISOTROPIC, MM_ANISOTROPIC. Для них единицей измерения является условная единица. Количество пикселов, приходящихся на одно деление в логической или физической системе координат, может быть установлено атрибутами меры протяженности логической системы координат (window extents) и меры протяженности физической системы координат (viewport extents). Каждый из атрибутов представляет собой пару чисел - меру протяженности по оси X и меру протяженности по оси Y ((xWinExt, yWinExt) и (xViewExt, yViewExt)).
Понятие "мера протяженности" можно представить, как точку на оси X или Y или как "эталонный отрезок" от начала системы координат до этой точки. При установлении соответствия между логической и физической системами координат точки в логической и физической системах координат совмещаются растяжением (или сжатием) логической системы по осям X и Y. Меры протяженности задают значения xScale и yScale так:
xScale = xViewExt / xWinExt , yScale = yViewExt / yWinExt .