Поскольку программа SuperSwitch является видоизмененной версией Switch, мы не будем обсуждать весь ее код. Вместо этого будут рассмотрены лишь отличающиеся фрагменты SuperSwitch.
Рис. 4.2. Программа SuperSwitch
Отличия начинаются с того, что классы в этой программе называются SuperSwitchWin и SuperSwitchApp (вместо SwitchWin и SwitchApp). Класс SuperSwitchWin похож на SwitchWin, но в нем имеется несколько новых функций и переменных. Давайте посмотрим, что же изменилось. Объявление класса SuperSwitchWin приведено в листинге 4.6.
Листинг 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; }; |