Глава 25. Графический интерфейс устройства_______________________737
\
пока не достигается центр окна. Закрашиваются прямоугольники кистью со случайными параметрами. Как легко видеть, OWL позволяет получить хоть и простые, но достаточно интересные графические приложения с помощью кода очень небольшого объема.
Окно фигур и линий
Поскольку определение класса ShapesAndFiliswindow фактически идентично определению класса Rectswindow, которое уже обсуждалось выше, пропустим заголовочный файл и перейдем прямо к исходному коду, который приводится в листинге 25.5.
// Необходимые -заголовки 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;