Глава 25. Графический интерфейс устройства_______________________737

\

пока не достигается центр окна. Закрашиваются прямоугольники кистью со случайными параметрами. Как легко видеть, OWL позволяет получить хоть и простые, но достаточно интересные графические приложения с помощью кода очень небольшого объема.

Окно фигур и линий

Поскольку определение класса ShapesAndFiliswindow фактически идентично определению класса Rectswindow, которое уже обсуждалось выше, пропустим заголовочный файл и перейдем прямо к исходному коду, который приводится в листинге 25.5.

h07311.jpg

// Необходимые -заголовки ttinclude "fills.h" •

// Перечисление для различных операций GDI typedef enum ( Lines, Ellipses, Rectangles, Fills } GDIDrawType;

// Таблица ответов для класса окна DEFINE_RESPONSE_TABLE1(ShapesAndFiliswindow, BaseWindow)

EV_WM_SIZE, END_RESPONSE_TABLE;

// Проверим, возможно ли безопасное приведение типов IMPLEMENT_CASTABLE1(ShapesAndFiliswindow, BaseWindow) ;

// Конструктор ShapesAndFiliswindow::ShapesAndFiliswindow() : BaseWindow(),

usTickCount(0) { }

/'/ В ответ на сообщение о размере — обновление окна

void ShapesAndFiliswindow::EvSize(UINT Type, TSizeS NewSize)

{

BaseWindow::EvSize(Type, NewSize) ;

Invalidate() ;

}

// Функция обратного вызова для тиков таймера

void ShapesAndFiliswindow::TimerTick()

{

// Обновление окна каждые 10 секунд, // т. е. каждые 200 шагов таймера if (++usTickCount == 200) { Invalidate() ;

usTickCount =0;