Вход/Регистрация
Графика для Windows средствами DirectDraw
вернуться

Трухильо Стэн

Шрифт:

void BmpViewWin::DrawScene {

 if (update_screen && bmpsurf) {

ClearSurface(backsurf, 0);

BltSurface(backsurf, bmpsurf, x, y);

primsurf->Flip(0, DDFLIP_WAIT);

update_screen=FALSE;

 }

}

Поскольку текущее положение поверхности рассчитывается в другом месте программы, а функция BltSurface при необходимости автоматически выполняет отсечение, функция DrawScene реализуется просто. Если переменная update_screen равна TRUE и существует поверхность для вывода, экран обновляется. Если поверхность не заполняет экран целиком, содержимое вторичного буфера стирается; если заполняет, то в стирании буфера нет необходимости. Затем функция BltSurface копирует поверхность на вторичный буфер, а функция Flip отображает изменения на экране. После того как обновление будет завершено, переменной update_screen присваивается значение FALSE. 

Обработка пользовательского ввода 

Давайте посмотрим, как в нашей программе организована обработка ввода. Нажатые клавиши обрабатываются функций OnKeyDown, которая выглядит так:

void BmpViewWin::OnKeyDown(UINT key, UINT nRepCnt, UINT nFlags) {

 switch (key) {

 case VK_UP:

Up;

break;

 case VK_DOWN:

Down;

break;

 case VK_LEFT:

Left;

break;

 case VK_RIGHT:

Right;

break;

 case VK_HOME:

Home;

break;

 case VK_END:

End;

break;

 case VK_PRIOR:

PageUp;

break;

 case VK_NEXT:

PageDown;

break;

 case VK_ESCAPE:

 case VK_SPACE:

 case VK_RETURN:

ShowDialog;

break;

 }

 DirectDrawWin::OnKeyDown(key, nRepCnt, nFlags);

}

С первого взгляда на листинг OnKeyDown можно разве что понять, какие клавиши обрабатываются программой, потому что вся содержательная работа поручается другим функциям. Обратите внимание — при нажатии клавиш Escape, пробел и Enter вызывается одна и та же функция ShowDialog. Это облегчает вызов диалогового окна после вывода изображения.

Остальные восемь функций, вызываемых функцией OnKeyDown, изменяют положение поверхности во время прокрутки:

• Up

• Down

• Left

• Right

• Home

• End

• PageUp

• PageDown

Каждая из этих функций определяет положение поверхности по значениям переменных x, y, xlimit, ylimit, xscroll и yscroll. Код всех восьми функций приведен в листинге 5.9.

Листинг 5.9. Функции смещения поверхности

void BmpViewWin::Up(int inc) {

 if (!yscroll) return;

 if (y+inc<0) {

y+=inc;

update_screen=TRUE;

 } else {

y=0;

update_screen=TRUE;

 }

}

void BmpViewWin::Down(int inc) {

 if (!yscroll) return;

 if (y-inc>=ylimit) {

y-=inc;

update_screen=TRUE;

 } else {

y=ylimit;

update_screen=TRUE;

 }

}

void BmpViewWin::Left(int inc) {

 if (!xscroll) return;

 if (x+inc<0) {

x+=inc;

update_screen=TRUE;

 } else {

x=0;

update_screen=TRUE;

 }

}

void BmpViewWin::Right(int inc) {

 if (!xscroll) return;

 if (x-inc>=xlimit) {

x-=inc;

update_screen=TRUE;

 } else {

x=xlimit;

update_screen=TRUE;

 }

}

void BmpViewWin::Home {

  • Читать дальше
  • 1
  • ...
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: