Ассемблер для Windows



         

Процедура копирования одной



Рисунок 2.1.5. Вывод текста под углом 90 градусов.




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

Если кто-то программировал для операционной системы MS DOS, то там подобная проблема также возникает. Решается она следующим образом: используется фоновая видеостраница, на которую выводится вся информация. Затем фоновая страница копируется на видимую страницу. При этом создается впечатление, что информация появляется на экране мгновенно. В качестве фоновой страницы используется как область ОЗУ, так и область видеопамяти.

Аналогично в операционной системе Windows образуется виртуальное окно, и весь вывод информации производится туда. Затем по приходе сообщения WM_PAINT содержимое виртуального окна копируется на реальное окно. В целом общая схема такова:

1. При создании окна:

  1. Создается совместимый контекст устройства.
  2. Функция CreateCompatibleDC. Полученный контекст следует запомнить.

  3. Создается карта бит, совместимая с данным контекстом.
  4. Функция CreateCompatibleBitmap.

  5. Выбирается кисть цветом, совпадающим с цветом основного окна.
  6. Создается битовый шаблон путем выполнения растровой операции с использованием выбранной кисти. Функция PatBlt.
  7. 2. Вся информация выводится в виртуальное окно и дается команда перерисовки окна. Функция InvalidateRect.

    3. При получении сообщения WM_PAINT содержимое виртуального окна копируется на реальное окно. Функция BitBlt. Изложенная теория будет применена на практике в следующем разделе.




    Содержание  Назад  Вперед