http://seprize.narod.ru

Блитинг

< Часть 1 | Часть 2 | Часть 3 >

Блиттингом называется копирование графических изображений в память видеоустройств, и DirectDraw представляет собой просто механизм Блиттинга.

Начнем знакомство с этим механизмом. Пример является продолжением знакомства с DirectDraw. В примере используется первичная по­верхность, которая полноэкранная, на нее с помощью вспомогательной канвы выводится растровое изображение. Это изображение, используемое здесь, взято из DirectX SDK производства Microsoft. Содержит эта картинка пейзаж.

Отличие данного примера состоит в том, что по­верхность, служащая фоном нашего растра, закрашивается. Работа прило­жения теперь выглядит естественной для полноэкранных приложений во­обще, и для приложений, использующих DirectDraw, в частности. Что украшает нашу программу.

Поскольку это полноэкранное приложение, то обработчики событий OnCanResize и onResize ему не нужны. Не пропустите также, что свойство BorderStyle формы необходимо установить в bsNone. Это важно, если этого не сделать, то приложение будет работать прекрасно, но при движении курсора вблизи границ экрана и в районе системного заголовка окна приложения сквозь "экран" будет проглядывать другое окно. Обязательно проверьте это, вернув обычное значение указанного свойства формы. Полноэкранная поверхность занимает рабочий стол, загораживает собой все окна, но они продолжают реагировать на поступающие им сообщения.

Чтобы при восстановлении приложения его окно появлялось распахнутым на весь экран, появился обработчик события OnRestore компонента

ApplicationEvents1:

procedure TfrmDD.ApplicationEvents1Restore(Sender: TObject); begin

WindowState := wsMaximized;

end;

Следует задавать это свойство именно динамически, т. е. принудительно распахивать окно при каждом его восстановлении. Главные изменения коснулись кода, связанного с перерисовкой окна. Часть этого кода, предназначенную для вывода изображения, рассматривать не будем. Здесь ничего нового для нас нет. Посмотрим внимательно на то, что ему предшествует, а именно на заполнение фона черным цветом. Кстати, обратите внимание, что порядок действий должен быть такой: закрашиваем фон, на за­крашенный фон выводим растр.

Процедура обработчика перерисовки окна имеет локальную вспомогатель­ную переменную ddbltfx типа tddbltfx, который представляет собой запись и является вспомогательным, подобным использованному нам при создании поверхности типу TDDSurfaceDesc2, но применяется лишь для задания пара­метров Блиттинга. Поля этой структуры мы изучим по ходу дальнейшего изложения. Пока ограничимся тем, что значение поля dwFillcolor задает цвет заполнения поверхности. Как указывалось ранее, работа с подобными структурами начинается с обнуления всех полей и задания ее размера указа­нием значения поля dwsize:

 

ZeroMemory(@ddbltfx, SizeOf (ddbltfx)); // Обнуляем все поля

ddbltfx.dwSize := SizeOf (ddbltfx);     // Обязательно задаем размер

ddbltfx.dwFillColor := 0;               // Цвет заполнения черный

 

Для блиттинга используем метод Blt первичной поверхности:

hRet := FDDSPrimary .Bit (nil, nil, nil, DDBLT_COLORFILL or DDBLT_WAIT,@ddbltfx) ;

 

 

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

DDERR_WASSTILLDRAWING. Флаг DDBLT_COLORFILL сообщает методу Blt О ТОМ, ЧТО

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

< Часть 1 | Часть 2 | Часть 3 >

 

. : навигация : .

главная
DirectX
уроки
словарь
гостевая книга
о проекте
 
.: DirectX :.
введение
уроки
файлы
 

статистика

RAMBLER'S TOP100

Если вы используете материалы с данного сайта, то сообщите владельцу по почте
и вставьте ссылку на этот сайт "seprize.narod.ru"
seprize@narod.ru

© Сайт открылся 04.09.2002     Дата последнего обновления 09.10.2002

Сайт управляется системой uCoz