Глава 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);