Графика для Windows средствами DirectDraw
Шрифт:
Единственной
• OnKeyDown
• OnRButtonDown
• OnCreate
• OnDestroy
Функция OnKeyDonw обрабатывает нажатия нескольких клавиш, среди которых клавиши со стрелками, Home, End, Page Up, Page Down, Enter, пробел и Escape.
Функции OnCreate и OnDestroy предназначены соответственно для инициализации и освобождения структур данных приложения. В частности, функция OnCreate создает диалоговое окно для выбора BMP-файла, а функция OnDestroy уничтожает его.
Далее следуют объявления нескольких закрытых переменных. Функция SelectInitialDisplayMode похожа на версию, созданную DirectDraw AppWizard и использованную в прошлых программах, но в нее внесены некоторые изменения. Кроме выбора исходного видеорежима, эта функция сохраняет текущую палитру Windows с помощью функции GetSystemPalette (которая объявляется несколькими строками ниже функции SelectInitialDisplayMode).
Функция CreateCustomSurfaces объявляется и определяется в объявлении класса. В отличие от других программ, рассмотренных нами, BmpView не отображает никаких вспомогательных поверхностей, поэтому эта функция не делает ничего. Однако из-за того, что функция DirectDrawWin::CreateCustomSurfaces является чисто виртуальной, нам приходится объявить и определить ее минимальную реализацию.
Функция DrawScene отвечает за графический вывод и переключение страниц. Поскольку нашей программе незачем постоянно обновлять экран, функция DrawScene делает это лишь в ответ на пользовательский ввод. Этим она отличается от других программ, в которых экран обновлялся непрерывно. Функция RestoreSurfaces восстанавливает поверхности в случае их потери.
Функция ShowDialog выводит диалоговое окно для выбора BMP-файла. Функция LoadBmp по имени, полученному из диалогового окна, загружает BMP-файл
Затем мы объявляем восемь функций, вызываемых при нажатии конкретных клавиш:
• PageUp
• PageDown
• Home
• End
• Left
• Right
• Up
• Down
Класс содержит несколько переменных, часть из которых упоминалась выше. Их назначение рассматривается при описании функций.
Перед тем как инициализировать DirectDraw, класс DirectDrawWin вызывает функцию SelectDriver, чтобы производные классы могли выбрать драйвер DirectDraw при наличии нескольких вариантов. В программе BmpView мы отказываемся от этой возможности и позволяем выбрать первичный драйвер по умолчанию. Это сделано потому, что для вывода диалоговых окон используется механизм GDI, а GDI может выводить только на первичное видеоустройство (которому соответствует первичный драйвер DirectDraw).
Следующим этапом инициализации приложения является вызов функции SelectInitialDisplayMode, которую мы обязаны переопределить. Наша версия SelectInitialDisplayMode выбирает видеорежим с параметрами 640x480x16. Исходный видеорежим не так уж важен, потому что он, скорее всего, будет переопределен пользователем при выборе BMP-файла. Однако функция SelectInitialDisplayMode (см. листинг 5.6) выполняет две дополнительные задачи.
Листинг 5.6. Функция BmpViewWin::SelectInitialDisplayMode