724 ____________Часть V. Инструментарий программиста

этих классов. Именно в этом файле, показанном на листинге 25.2, происходит создание таймера и порожденных окон.

// Необходимые заголовки

#include <owl\mdi.h> ftinclude "demo.h"

#include "rects.h" ftinclude "smiley.h" ttinclude "fills.h"

IMPLEMENT_CASTABLE1(BaseWindow, TWindow) ;

DEFINE_RESPONSE_TABLE1(DemoMDIWindow, TMDIClient)

EV_COMMAND(ShowChildrenId, CmShowChildren), .

EV_WM_TIMER,

EV_WM_SIZE,

EV_WM_DESTROY, END RESPONSE TABLE;

// ===================== Demo MDI Window

// Инициализация порожденных окон и создание таймера void DemoMDIWindow::SetupWindow()

{

// Первым инициализируется родительский класс TMDIClient::SetupWindow() ;

// Создание таймера if (!SetTimer(0, 50)){

MessageBox("Создать таймер не удалось", "OWL 5.0 GDI Demo", MB_OK) ;

PostQuitMessage(0) ;

return;

}

// Создание порожденных окон Children[0] = new TMDIChild(*this, "Прямоугольники",

new RectsWindow) ;

Children[l] = new TMDIChild(*this, "Фигуры и линии",

new ShapesAndFillsWindow) ;

Children[2] = new TMDIChild(*this, "Эллипсы и дуги",

new SmileyWindow) ;

// Устанавливаем стили такими, что порожденные окна спрятаны, // неактивны и не имеют своего заголовка. Затем создаем окна. for (int iLoop = 0; iLoop < 3; iLoop++) {

Children[iLoop]->Attr.Style &= ~(WS_VISIBLE I WS_SYSMENU I WS_MINIMIZEBOX I WS MAXIMIZEBOX);