Класс SwitchWin
Давайте рассмотрим код программы Switch. Начнем с определения класса
SwitchWin (см. листинг 4.2).
Листинг 4.2. Объявление класса SwitchWin
class SwitchWin : public DirectDrawWin { public: SwitchWin(); protected: //{{AFX_MSG(SwitchWin) afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: int SelectDriver(); int SelectInitialDisplayMode(); BOOL CreateCustomSurfaces(); void DrawScene(); void RestoreSurfaces(); BOOL CreateMenuSurface(); BOOL UpdateMenuSurface(); BOOL CreateFPSSurface(); BOOL UpdateFPSSurface(); private: LPDIRECTDRAWSURFACE bmpsurf; int x, y; int xinc, yinc; LPDIRECTDRAWSURFACE menusurf; int selectmode; LPDIRECTDRAWSURFACE fpssurf; RECT fpsrect; BOOL displayfps; DWORD framecount; HFONT smallfont, largefont; };
|
Класс
SwitchWin содержит всего одну открытую (
public) функцию — конструктор класса (вскоре мы его рассмотрим). В классе также присутствует функция
OnKeyDown() — обработчик сообщений, созданный ClassWizard (закомментированные директивы
AFX, окружающие функцию
OnKeyDown(), используются ClassWizard для поиска функций-обработчиков). Мы воспользуемся этой функцией для обработки нажимаемых клавиш — стрелок,
Enter и незаменимой клавиши
Escape.
Следующие пять функций являются переопределенными версиями функций
DirectDrawWin:
- SelectDriver()
- SelectInitialDisplayMode()
- CreateCustomSurfaces()
- DrawScene()
- RestoreSurfaces()
С помощью функции
SelectDriver() приложение выбирает используемое видеоустройство (если их несколько). Она полностью совпадает со стандартной версией, создаваемой AppWizard, и выводит меню при наличии нескольких драйверов. Функция
SelectInitialDisplayMode() задает исходный видеорежим, устанавливаемый приложением. Здесь снова используется стандартная версия AppWizard, которая ищет видеорежим с параметрами 640x480x16.
Функция
CreateCustomSurfaces() вызывается
DirectDrawWin при активизации нового видеорежима; мы воспользуемся этой функцией для создания и подготовки поверхностей программы Switch. Функция
DrawScene() отвечает за обновление экрана; она будет использоваться для отображения анимации, меню видеорежимов и значения FPS. Наконец, функция
RestoreSurfaces() вызывается классом
DirectDrawWin при необходимости восстановить потерянные поверхности. Эта функция восстанавливает не только сами поверхности, но и (для особо важных поверхностей) их содержимое.
Затем класс
SwitchWin объявляет четыре функции, специфические для программы Switch:
- CreateMenuSurface()
- UpdateMenuSurface()
- CreateFPSSurface()
- UpdateFPSSurface()
Это вспомогательные функции для работы с поверхностями, используемыми для вывода меню видеорежимов и значения FPS. Они подробно рассматриваются ниже в этой главе.
Закрытые переменные, объявленные в конце, предназначены для отображения анимации, меню видеорежимов и FPS, а также для работы со шрифтами средствами Win32.
Переменная
bmpsurf - указатель на интерфейс
DirectDrawSurface, через который мы будем обращаться к данным перемещаемого растра, а переменные
x, y, xinc и
yinc определяют его положение.
Указатель
menusurf используется для доступа к поверхности меню видеорежимов, а в целой переменной
selectmode хранится индекс текущего активного видеорежима.
Следующие переменные списка связаны с выводом значения FPS. Переменная
fpssurf — указатель на интерфейс
DirectDrawSurface, через который производится доступ к поверхности FPS. Структура типа
RECT (fpsrect) содержит размеры поверхности
fpssurf. Логическая переменная
displayfps управляет отображением значения FPS, а в переменной
framecount хранится количество кадров, выведенных в очередном временном интервале измерения FPS.
Две последние переменные,
smallfont и
largefont, имеют тип
HFONT. Это логические номера шрифтов Win32, используемые для вывода текста на поверхностях
menusurf и
fpssurf.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий