Графика для Windows средствами DirectDraw | страница 73
Давайте рассмотрим код программы 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