Глава 25. Графический интерфейс устройства 735
II Необходимые заголовки #include "base.h"
// Определение класса
class SmileyWindow : public BaseWindow { public:
// Конструктор SmileyWindow() ;
// Обработчики сообщений void TimerTick() ;
void Paint(TDC& dc, bool, TRect&);
protected:
// Обработчик сообщения WM SIZE void EvSizetUINT, TSizes Size);
private:
// Закрытые переменные float fCurrScaling, fScalingFactor;
// Масштабирование ограничивающего лицо прямоугольника void ScaleRect(TRect& inRect);
DECLARE_CASTABLE ;
DECLARE_RESPONSE_TABLE(SmileyWindow) ;
};
ftendif
Стоит заметить, что SmileyWindow не отслеживает число шагов таймера в переменной usTickCount. Поскольку рисование лица более сложно и требует больших ресурсов процессора, Picdemo не пытается решать задачу увеличения быстродействия. Листинг 25.7 представляет код, реализующий класс
SmileyWindow.
// Включение нужных заголовков #include "smiiey.h"
// Начальные значения для масштабирования const float INITIAL_SCALING = 1.00;
const float INITIAL_SCALE_FACTOR = 0.08;
// Таблица ответов для класса SmileyWindow DEFINE_RESPONSE_TABLE1(SmileyWindow, BaseWindow)
EV__WM_SIZE, END_RESPONSE_TABLE;
// Проверим, возможно ли безопасное приведение типов IMPLEMENT_CASTABLE1(SmileyWindow, BaseWindow);