Трухильо Стэн
Шрифт:
Поскольку текущее положение поверхности рассчитывается в другом месте программы, а функция BltSurface при необходимости автоматически выполняет отсечение, функция DrawScene реализуется просто. Если переменная update_screen равна TRUE и существует поверхность для вывода, экран обновляется. Если поверхность не заполняет экран целиком, содержимое вторичного буфера стирается; если заполняет, то в стирании буфера нет необходимости. Затем функция BltSurface копирует поверхность на вторичный буфер, а функция Flip отображает изменения на экране. После того как обновление будет завершено, переменной update_screen присваивается значение FALSE.
Обработка пользовательского ввода
Давайте посмотрим, как в нашей программе организована обработка ввода. Нажатые клавиши обрабатываются функций OnKeyDown, которая выглядит так:
С первого взгляда на листинг OnKeyDown можно разве что понять, какие клавиши обрабатываются программой, потому что вся содержательная работа поручается другим функциям. Обратите внимание — при нажатии клавиш Escape, пробел и Enter вызывается одна и та же функция ShowDialog. Это облегчает вызов диалогового окна после вывода изображения.
Остальные восемь функций, вызываемых функцией OnKeyDown, изменяют положение поверхности во время прокрутки:
• Up
• Down
• Left
• Right
• Home
• End
• PageUp
• PageDown
Каждая из этих функций определяет положение поверхности по значениям переменных x, y, xlimit, ylimit, xscroll и yscroll. Код всех восьми функций приведен в листинге 5.9.
Листинг 5.9. Функции смещения поверхности