Графика для Windows средствами DirectDraw | страница 73



.

Класс 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