Программа, использующая двойную буферизацию для отображения движущейся тележки, показанной на рис. 16.1, находится в каталоге ConMem. Она построена на базе проекта Template, в котором изменены функции OnTimer (), OnSi ze(), OnCreate(), OnMenu() и добавлены модули для организации двойной буферизации, моделирования и рисования тележки.

Двойная буферизация

Рисование в системной памяти

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

Контекст памяти и двойная буферизация

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

В данном проекте выполнение инициализации организовано по сообщению WM_CREATE, как показано в листинге 16.1.

Листинг 16.1

#include <windows.h>
void InitRenderCHWND hWnd);
int InitModeKHWND hWnd);
void OnCreate(HWND hWnd.UINT message.WPARAM wParam.LPARAM lParam) {

InitRender( hWnd); //Инициализация графики. InitModel(hWnd); //Инициализация моделей. }

Графические библиотеки обычно позволяют выделять в видеопамяти место для видимого и невидимого образов экрана. Также они предоставляют средства для их аппаратного переключения. Эти образы экранов могут иметь различные названия. По терминологии Borland, это видимая (VisuaLPage) и активная (ActivPage) страницы, в библиотеке DirectX фирмы Microsoft это первичная поверхность (PrimarySurface) и теневой буфер (BackBuffer).

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


⇐ Предыдущая| |Следующая ⇒