Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
.docx
Скачиваний:
8
Добавлен:
30.10.2018
Размер:
824.42 Кб
Скачать

1. Интерфейс графического устройства gdi. Обработка сообщений wm_paint.

GDI (GraphicsDeviceInterface, GraphicalDeviceInterface) — один из трёх основных компонентов или «подсистем», вместе с ядром и Windows API составляющих пользовательский интерфейс (оконный менеджер GDI) MicrosoftWindows. GDI — это интерфейс Windows для представления графических объектов и передачи их на устройства отображения, такие как мониторы и принтеры.

GDI отвечает за отрисовку линий и кривых, отображение шрифтов и обработку палитры. Он не отвечает за отрисовку окон, меню и т. п., эта задача закреплена за пользовательской подсистемой, располагающейся в user32.dll и основывающейся на GDI. GDI выполняет те же функции, что и QuickDraw в Mac OS.

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

Обработка сообщения WM_PAINT крайне важна для программирования под Windows. Это сообщение уведомляет программу, что часть или вся клиентская область окна недействительна (invalid) и ее следует перерисовать.В каких ситуациях клиентская область окна становится недействительной? Очевидно, что при создании окна недействительна вся его клиентская область, поскольку в ней еще ничего не нарисовано. Это раз. Если вы меняете размеры окна, клиентская область также объявляется системой недействительной, что обусловлено комбинацией стилей CS_HREDRAW | CS_VREDRAW в поле styleструктуры класса окна. Это два. Когда вы минимизируете окно программы, сворачивая его на панель задач, а затем снова разворачиваете до начального размера, то Windows объявляет клиентскую область окна недействительной. Это три.

Во всех перечисленных случаях, кроме первого, операционная система автоматически помечает клиентскую область окна как недействительную, что влечет за собой посылку сообщения WM_PAINT. В первом случае, когда окно только что было создано, аналогичный эффект достигается вызовом функции ShowWindow. В процессе ее выполнения генерируются сообщения WM_SIZE и WM_M0VE, а обрабатывая WM_SIZE, система автоматически генерирует сообщение WM_PAINT.Обработкусообщения WM_PAINT рекомендуетсявсегданачинать с вызовафункции Begin Paint:

hDC - BeginPainUhWnd, &ps);

Первыйпараметрфункциисодержитдескрипторокна, полученныйчерезаргументоконнойпроцедуры, а второй — адресструктурыpsтипа PAINTSTRUCT.Поляэтойструктуры, заполняемые в результатевыполненияфункцииBeginPaint, в дальнейшемиспользуютсяоперационнойсистемой.

2. Обмін інформацією між процесами та потоками. Обмін даними за допомогою файлів.

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

Потоком называют ход выполнения программы. Поток выполняется в рамкахвладеющего им процесса или, как говорят, в контексте процесса. Именно потоку операционная система выделяет кванты процессорного времени.

Как правило, потоки, сосуществующие в рамках одного процесса, выполняют взаимосвязанные задачи и работа одного потока может зависеть от хода или результатов работы другого. В этом случае необходимо организовать передачу информации из потока впоток. В качестве передаваемой информации часто выступают данные, подготовленные,например, в одном потоке, но используемые в другом. Однако из потока в поток (и изпроцесса в процесс) можно передавать не только данные, но и приказы на выполнение

заданных действий.

В тех случаях, когда скорость обработки данных не имеет решающего значения, обменданными между процессами можно выполнять через разделяемые файлы. Для того чтобысделать файл разделяемым, достаточно при его открытии указать флаги FILE_SHARE_READ или FILE_SHARE_WRITE (или их комбинацию).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]