Функциональные возможности приложения Zoom сосредоточены в классе ZoomWin:
class ZoomWin : public RMWin { public: ZoomWin(); BOOL CreateScene(); protected: //{{AFX_MSG(ZoomWin) afx_msg void OnRenderWireframe(); afx_msg void OnRenderFlat(); afx_msg void OnRenderGouraud(); afx_msg void OnUpdateRenderFlat(CCmdUI* pCmdUI); afx_msg void OnUpdateRenderGouraud(CCmdUI* pCmdUI); afx_msg void OnUpdateRenderWireframe(CCmdUI* pCmdUI); afx_msg void OnAnimationLinear(); afx_msg void OnAnimationSpline(); afx_msg void OnUpdateAnimationLinear(CCmdUI* pCmdUI); afx_msg void OnUpdateAnimationSpline(CCmdUI* pCmdUI); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: static void AdjustField(LPDIRECT3DRMFRAME frame, void*, D3DVALUE); private: LPDIRECT3DRMMESHBUILDER meshbuilder; static LPDIRECT3DRMFRAME zoomframe; static LPDIRECT3DRMANIMATION animation; };
В классе объявлены две открытые функции: конструктор и функция CreateScene(). Конструктор используется для инициализации динамических членов данных класса. (Статические члены данных класса получают нулевые значения автоматически, поэтому нет никакой необходимости заниматься их инициализацией.) Поскольку в классе есть только один динамический член данных, код выглядит следующим образом:
ZoomWin::ZoomWin() { meshbuilder = 0; }
Функция CreateScene() создает сцену приложения. Мы рассмотрим ее код чуть позже.
Далее следует объявление десяти защищенных функций. Первые шесть из них являются обработчиками сообщений, необходимыми для реализации меню Render. Оставшиеся четыре функции необходимы для поддержки меню Animation. Функции, относящиеся к меню Animation мы рассмотрим чуть позже. Функции, реализующие меню Render аналогичны подобным функциям из рассмотренных ранее приложений.
Потом расположено объявление функции обратного вызова AdjustField(). Эта функция используется для изменения параметров поля зрения порта просмотра во время работы программы.
В самом конце объявлены три закрытых члена данных:
LPDIRECT3DRMMESHBUILDER meshbuilder; static LPDIRECT3DRMFRAME zoomframe; static LPDIRECT3DRMANIMATION animation;
Указатель meshbuilder используется для доступа к сетке демонстрационной программы. Он применяется в функции CreateScene() и в шести защищенных обработчиках сообщений меню Render. Переменная zoomframe является указателем на пустой фрейм, а переменная animation— это указатель на интерфейс Direct3DRMAnimation. Мы будем использовать интерфейс анимации и пустой фрейм при «анимации» поля зрения порта просмотра. О том, как это работает, мы поговорим во время обсуждения функции AdjustField().