Вход/Регистрация
Графика для Windows средствами DirectDraw
вернуться

Трухильо Стэн

Шрифт:

Листинг 4.6. Объявление класса SuperSwitchWin

class SuperSwitchWin : public DirectDrawWin {

public:

 SuperSwitchWin;

protected:

 //{{AFX_MSG(SuperSwitchWin)

 afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);

 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

 //}}AFX_MSG

 DECLARE_MESSAGE_MAP

private:

 int SelectDriver;

 int SelectInitialDisplayMode;

 BOOL CreateCustomSurfaces;

 static HRESULT WINAPI StoreModeInfo(LPDDSURFACEDESC, LPVOID);

 void DrawScene;

 void RestoreSurfaces;

 BOOL CreateModeMenuSurface;

 BOOL UpdateModeMenuSurface;

 BOOL CreateRateMenuSurface;

 BOOL UpdateRateMenuSurface;

 BOOL CreateFPSSurface;

 BOOL UpdateFPSSurface;

private:

 LPDIRECTDRAWSURFACE bmpsurf;

 int x,y;

 int xinc, yinc;

 LPDIRECTDRAWSURFACE modemenusurf;

 int selectmode;

 LPDIRECTDRAWSURFACE ratemenusurf;

 int selectrate;

 int numrates;

 BOOL ratemenu_up;

 LPDIRECTDRAWSURFACE fpssurf;

 RECT fpsrect;

 BOOL displayfps;

 DWORD framecount;

 BOOL include_refresh;

 CArray<DWORD,DWORD> refresh_rates[MAXDISPLAYMODES];

 HFONT smallfont, largefont;

};

Отличия начинаются с функции OnCreate. Мы переопределяем функцию DirectDrawWin::OnCreate так, чтобы перед инициализацией DirectDraw в ней выводилось диалоговое окно (в котором можно отключить изменение частоты смены кадров).

Другая новая функция — StoreModeInfo. Эта функция косвенного вызова вызывается при составлении списка частот каждого видеорежима. Как говорилось в главе 3, класс DirectDrawWin имеет для этой цели собственную функцию косвенного вызова (DisplayModeAvailable). Вместо того чтобы изменять класс DirectDrawWin, мы воспользуемся функцией StoreModeInfo, приспособленной для целей конкретного приложения. Это означает, что список видеорежимов будет составляться дважды: сначала без частот смены кадров (класс DirectDrawWin), а потом с частотами (класс SuperSwitchWin).

Далее в списке идут четыре новые функции:

• CreateModeMenuSurface

• UpdateModeMenuSurface

• CreateRateMenuSurface

• UpdateRateMenuSurface

Функции CreateModeMenuSurface и UpdateModeMenuSurface — это просто переименованные функции CreateMenuSurface и UpdateMenuSurface из программы Switch. Их пришлось переименовать, потому что теперь существуют две поверхности меню: одна — для видеорежимов, а другая — для частот смены кадров. Функции CreateModeMenuSurface и UpdateModeMenuSurface работают с поверхностью меню видеорежимов. Две новые функции, CreateRateMenuSurface и UpdateRateMenuSurface, предназначены для работы с поверхностью меню частот.

Теперь давайте рассмотрим новые и изменившиеся переменные класса. Указатель menusurf из программы Switch был переименован в modemenusurf по той же причине, по которой были переименованы функции для работы с поверхностью меню видеорежимов. Далее в классе появились шесть новых переменных. Я снова приведу объявления новых переменных класса из листинга 4.6:

LPDIRECTDRAWSURFACE ratemenusurf;

int selectrate;

int numrates;

BOOL ratemenu_up;

BOOL include_refresh;

CArray<DWORD,DWORD> refresh_rates[MAXDISPLAYMODES];

Переменная ratemenusurf представляет собой указатель на интерфейс DirectDrawSurface и используется для работы с поверхностью меню частот. В целых переменных selectrate и numrates хранятся соответственно текущая выделенная частота и общее количество отображаемых частот. Логическая переменная ratemenu_up показывает, отображается ли меню частот в данный момент.

  • Читать дальше
  • 1
  • ...
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: