Определение класса
В программе BmpView, как и в других программах этой книги, класс окна приложения является производным от класса
DirectDrawWin. К сожалению, по нашему соглашению об именах имя производного класса образуется из имени приложения и суффикса
Win. Следовательно, класс окна приложения BmpView называется
BmpViewWin, что выглядит несколько неуклюже. Объявление класса
BmpViewWin приведено в листинге 5.5.
Листинг 5.5. Класс BmpViewWin
class BmpViewWin : public DirectDrawWin { public: BmpViewWin(); protected: //{{AFX_MSG(BmpViewWin) afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnRButtonDown(UINT nFlags, CPoint point); afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnDestroy(); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: int SelectInitialDisplayMode(); BOOL CreateCustomSurfaces() { return TRUE; } void DrawScene(); void RestoreSurfaces(); void GetSystemPalette(); void ShowDialog(); BOOL LoadBmp(); void PageUp(); void PageDown(); void Home(); void End(); void Left(int inc=4); void Right(int inc=4); void Up(int inc=4); void Down(int inc=4); private: BmpDialog* bmpdialog; LPDIRECTDRAWPALETTE syspal; CString fullfilename; CString filename; CString pathname; CRect displayrect; LPDIRECTDRAWSURFACE bmpsurf; CRect bmprect; int x,y; int xscroll, yscroll; int xlimit, ylimit; BOOL update_screen; DisplayModeArray palettemode, nonpalettemode; };
|
Единственной открытой (
public) функцией класса является конструктор, используемый для инициализации переменных. Далее мы объявляем четыре обработчика сообщений:
- OnKeyDown()
- OnRButtonDown()
- OnCreate()
- OnDestroy()
Функция
OnKeyDonw() обрабатывает нажатия нескольких клавиш, среди которых клавиши со стрелками,
Home, End, Page Up, Page Down, Enter, пробел и
Escape.
Функции
OnCreate() и
OnDestroy() предназначены соответственно для инициализации и освобождения структур данных приложения. В частности, функция
OnCreate() создает диалоговое окно для выбора BMP-файла, а функция
OnDestroy() уничтожает его.
Далее следуют объявления нескольких закрытых переменных. Функция
SelectInitialDisplayMode() похожа на версию, созданную DirectDraw AppWizard и использованную в прошлых программах, но в нее внесены некоторые изменения. Кроме выбора исходного видеорежима, эта функция сохраняет текущую палитру Windows с помощью функции
GetSystemPalette() (которая объявляется несколькими строками ниже функции
SelectInitialDisplayMode()).
Функция
CreateCustomSurfaces() объявляется и определяется в объявлении класса. В отличие от других программ, рассмотренных нами, BmpView не отображает никаких вспомогательных поверхностей, поэтому эта функция не делает ничего. Однако из-за того, что функция
DirectDrawWin::CreateCustomSurfaces() является чисто виртуальной, нам приходится объявить и определить ее минимальную реализацию.
Функция
DrawScene() отвечает за графический вывод и переключение страниц. Поскольку нашей программе незачем постоянно обновлять экран, функция
DrawScene() делает это лишь в ответ на пользовательский ввод. Этим она отличается от других программ, в которых экран обновлялся непрерывно. Функция
RestoreSurfaces() восстанавливает поверхности в случае их потери.
Функция
ShowDialog() выводит диалоговое окно для выбора BMP-файла. Функция
LoadBmp() по имени, полученному из диалогового окна, загружает BMP-файл на поверхность и инициализирует переменные
x, y, xscroll, yscroll, xlimit и
ylimit. Эти переменные предназначены для позиционирования поверхности в случае, если размер поверхности BMP-файла превышает размеры первичной поверхности.
Затем мы объявляем восемь функций, вызываемых при нажатии конкретных клавиш:
- PageUp()
- PageDown()
- Home()
- End()
- Left()
- Right()
- Up()
- Down()
Класс содержит несколько переменных, часть из которых упоминалась выше. Их назначение рассматривается при описании функций.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий