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