
- •Системное по. Цели, задачи, классификация
- •Операционная система. Основные функции ос. Структура операционной системы.
- •Общая характеристика операционных систем Microsoft: семейства dos, Windows
- •Интерфейс прикладных программ (api). Apidos (программные прерывания) и Win32
- •Дисковая подсистема в архитектуре ibmpc
- •Низкоуровневая организация дисковой памяти. Сервис bios доступа к дисковой подсистеме.
- •Понятие файловой системы. Назначение, требования, функции. Способы организации фс.
- •Объекты файловой системы: файлы, директории, логические устройства, другие виды объектов.
- •Файловые системы на основе fat
- •X.2 Файловая система ntfs
- •Служебные структуры fat и их использование
- •Программный интерфейс файловой системы (функции для взаимодействия с фс, файлового ввода-вывода) – dos, Windows Функции общего назначения
- •Файловый ввод-вывод
- •14. Адресное пространство процесса (задачи).
- •15. Приложения Windows (Win 32), разновидности. Структура оконных приложений
- •1. Основные определения
- •2. Особенности приложений Win 32.
- •3. Событийное управление
- •4. Структура приложения
- •16. Окно Win32: назначение, виды, свойства. Оконные классы.
- •17. Создание и управление окнами.
- •18. Событийное управление в Win32. Сообщения и очереди сообщений Windows (Windowsmessages): назначение, структура, отсылка, доставка, обработка Сообщения и очереди сообщений.
- •19. Цикл обработки сообщений. Оконная процедура: назначение, выполнение, способы активизации и завершения.
- •20. Многозадачность, многозадачные операционные системы, особенности выполнения приложений в многозадачной среде. Модель многозадачности Win 32
- •21. Состояния процессов (многозадачная среда). Состояния процессов (потоков)
- •22. Многозадачность в win32. Планирование и выполнения программ в win32
- •23. Процессы win32. Атрибуты и состояния процессов. Порождение процессов и управление ими. Основы управления процессами Win32
- •24. Потоки и многопоточные приложения. Порождение потоков, состояние потоков, управление ими. Основы управления потоками Win32
- •25. Нити – альтернативное управление выполнением программы Управление нитями
- •26. Распределение времени выполнения программ в многозадачной системе. Приоритеты. Распределение времени между потоками (управление приоритетами)
- •27. Приоритеты процессов и потоков win32. Управление приоритетами.
- •28. Взаимодействие процессов/потоков, взаимное исключение, синхронизация (базовые сведения)
- •29. Реализация взаимного исключения. Механизм criticalsection.
- •30. Синхронизация при управлении процессами и потоками
- •31. Функция ожидания
- •32. Использование каналов и почтовых ящиков для обмена данными
- •33. Использование файловой системы для обмена данными
- •X.2.6. Использование сообщения wm_copydata
- •34. Графическая подсистема win32 – общая характеристика, основные принципы.
- •35. Основные объекты win32 gdi. Средства векторной и растровой графики
- •Растровая графика
- •36. Подсистема памяти. Основные задачи, функции, требования
- •37. Виртуальное адресное пространство, управление памятью.
- •38. Динамическое распределение памяти программами (heap). HeapApiWin32.
- •Функции работы с кучами (heap-область)
- •39. Подсистема памяти win32. Регионы(области) памяти. Группы функций api подсистемы памяти. Адресное пространство процесса.
- •40. Управление на уровне менеджера вирнуальной памяти. (vmm)
- •41. Отображение файлов в память Проецирование файлов в память
- •42. Системный реестр windows: назначение, организация, доступ
34. Графическая подсистема win32 – общая характеристика, основные принципы.
Т.н. GDI (Graphics Device interface) представляет собой единый унифицированный интерфейс устройств (средств) отображения графической информации в Windows. Работа GDI базируется на понятии контекста устройства (device context – DC), который абстрагирует свойства реальных устройств. К ним, в первую очередь, относятся экран, принтер и битовый образ в памяти. Контекст является внутренним объектом Windows, и доступ к нему осуществляется посредством функций API. Контекст идентифицируется его описателем, тип HDC (handle DC). Ввиду того, что прикладная программа никогда не манипулирует контекстом непосредственно и всегда использует для любого доступа к контексту его описатель, в дальнейшем по тексту термин контекст употребляется применительно как к системной структуре данных, так и к ее описателю, например, "получить контекст".
Контекст сопоставляется системой каждому изображаемому элементу (окну) и может быть получен прикладной программой. После этого она может к нему с единым набором функции, причем поведение контекста (изображения контекста) будет (теоретически) также одинаковым независимо от того, с каким устройством он связан, с точностью до ограничений этого устройства (например, устройство монохромного отображения цвета воспроизвести не может).
(Можно провести аналогию с BGI (BorlandGraphicsInterface) DOS-версий сред программирования – однотипным образом происходит инициализация и использование видеосистем различных типов. Но в Windows эта концепция развита дальше.)
Основы концепции GDI были заложены в Win16 и в дальнейшем расширены. Первоначально количество одновременно открываемых (активных) контекстов было ограничено пятью (??), в настоящее время – в пределах доступных ресурсов системы.
В простейшем случае контекст (описатель контекста) может быть получен для любого окна (оконного элемента) с помощью функций:
HDC GetDC(HWND hWnd);
HDC GetWindowDC(HWND hWnd);
HDC GetDCEx(HWND hWnd, HRGN hrgnClip, DWORD dwFlags)
Стандартно GetDC и GetDCEx возвращают контекст клиентской области окна (т.е. без заголовка, рамки (border) и пр.). Контекст всего окна может быть получен GetWindowDC или GetDCEx с соответствующим флагом (см. ниже).
Регион – понятие, родственное границе окна и графическому изображению, может формироваться в том числе и путем отрисовки в контексте, задает границы области отсечения. Более подробно рассматривается ниже. Область отсечения региона обычно накладывается по И на область видимости окна, но возможны и более сложные варианты их комбинирования (см. ниже).
Варианты флагов:
DCX_WINDOW – дать контекст всего окна, т.е. включая системную область; DCX_CACHE – работать с контекстом из кэша, что повышает скорость выполнения; DCX_PARENTCLIP – использовать видимую часть родительского окна, т.е. фактически его контекст; DCX_CLIPCHILDREN – исключить (отсечь) подчиненные (порожденные) окна; DCX_SIBLING – исключить дочерние окна того же родительского окна; DCX_NORESETATTRS – не сбрасывать состояние контекста при его освобождении; DCX_LOCKWINDOWUPDATE – работать даже при включенном LockWindowUpdate; DCX_EXCLUDERGN – исключить заданный регион из области отсечения; DCX_INTERSECTRGN – использовать пересечение региона с областью отсечения; DCX_VALIDATE -- ?
При этом поведение функции зависит также от некоторых установок стиля оконного класса (см. выше):
– CS_CLASSDC – использовать единственный разделяемый контекст для всех окон данного класса (контекст класса);
– CS_OWNDC – использовать собственный контекст для каждого экземпляра окна;
– CS_PARENTDC – использовать контекст и регион отсечения родительского окна.
Кроме получения контекста существующего окна (подразумевается экранное), можно также явно создавать новые контексты, связанные с определенным устройством.
Функции CreateDC, CreateCompatibleDC.
Форматфункций:
HDC CreateDC(
LPCTSTR lpszDriver,LPCTSTR lpszDevice,LPCTSTR lpszOutput,
CONST DEVMODE* lpInitData
);
HDC CreateCompatibleDC(HDC hPrimDC);
Действиефункций: созданиеновогоконтекста, связанногосуказаннымустройством (CreateDC) илисовместимогосизвестнымконтекстом (CreateCompatibleDC). Во втором случае если "образцовый" контекст не задан, то создается т.н. контекст в памяти (memorycontext), совместимый с текущими установками экрана.
Возвращаемое значение: описатель контекста или NULL.
Параметры:
lpszDriver – в Win 16 задавал имя драйвера устройства; в Win 32 может быть "DISPLAY" для контекстов, связанных с экраном, и NULL для всех других устройств, кроме того, в Windows NT может быть также имя принтера, обычно "WINSPOOL", в этих случаях остальные параметры должны быть NULL.
lpszDevice – логическое имя, под которым устройство известно в системе.
lpszOutput – имя устройства в файловой системе; в Win 32 не используется (равна NULL).
lpInitData – указатель на структуру DEVMODE с инициализирующими данными для устройства, или NULL если используются настройки по умолчанию.
hPrimDC – "образцовый" контекст, с которым будет совместим вновь создаваемый, если не задан (равен NULL), то подразумевается экран с текущими настройками.
Контексты "в памяти" обычно используются для временного (промежуточного) хранения и изображений. Для обеспечения работоспособности им необходимо предварительно явно задавать объект "битовый образ" (см. ниже), используемый в качестве "устройства отображения".
С одним устройством может быть связано несколько контекстов одновременно. Контексты при этом будут функционировать независимо, и их настройки будут оставаться индивидуальными, но реальное изображение будет комбинироваться из всех контекстов.
По окончании работы с контекстом он должен быть освобожден (закрыт). Для контекстов, полученных с помощью Get... используется функция ReleaseDC() (освобождает "общие" и оконные контексты). Для контекстов, созданных с помощью Create..., используется функция DeleteDC().
Формат функций:
intReleaseDC(HWNDhWnd, HDChDC);
intDeleteDC(HDChDC);
Возвращаемое значение: 1 при успешном завершении, 0 при ошибке.
Многие характеристики действующего контекста могут быть получены с помощью функции GetDeviceCaps(), принимающей в качестве аргумента описатель контекста и индекс (номер) интересующего параметра (описываются системными константами), и возвращающей значение этого параметра.
Как было указано ранее, все манипуляции с активным контекстом выполняются посредством функций API, которые можно грубо разделить на основные группы: формирование изображений, получение элементов изображений и конфигурирование подсистемы. Ниже будут рассмотрены основные моменты использования API графической подсистемы.