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

Конечно, основное действие задается в исходном модуле — листинг 25.4 — именно там находится код, определяющий рисование окон.

// Необходимые файлы ttinclude "rects.h"

// Минимальный размер прямоугольников static const int BAND_SIZE = 25;

// Таблица ответов для класса окон прямоугольников DEFINE_RESPONSE_TABLE1(RectsWindow, BaseWindow)

EV_WM_SIZE, END_RES PONSE_TABLE;

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

*

// Конструктор

RectsWindow::RectsWindow() : BaseWindow(), usTickCount(0)

{ }

// В ответ на сообщение о размере обновление окна void RectsWindow::EvSize(UINT Type, TSizes NewSize) {

BaseWindow::EvSize(Type, NewSize);

Invalidate() ;

)

// Обратный вызов для сигналов от таймера

void RectsWindow::TimerTick()

{

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

usTickCount = 0;

» }

// Рисуем прямоугольники

void RectsWindow::Paint(TDC& dc, bool, TRect&)

(

TRect rect = GetClientRect() ;

int iSize = min(rect.right, rect.bottom);

f

// Цикл пока прямоугольники не сделаются слишком маленькими

do {

// Создание прямоугольника с кистью случайного цвета dc.FillRect (rect, TBrush(RGB(random(.255), random(255), random(255))));