// Конструктор SmileyWindow::SmileyWindow() :

BaseWindowO,

fCurrScaling(INITIAL_SCALING),

fScalingFactor(INITIAL_SCALE_FACTOR) { >

// В ответ на сообщение о размере просто перерисовываем окно

void SmileyWindow::EvSize(UINT Type, TSizes NewSize)

{

BaseWindow::EvSize(Type, NewSize);

Invalidate(); ' , }

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

void SmileyWindow: :TiinerTick ()

{

// Перерисовываем наше окно

Invalidate();

}

// Покажем миру наше лицо с улыбкой

void SmileyWindow::Paint(TDC& dc, bool, TRectS)

(

// САМО ЛИЦО

// Вычисляем начальные границы прямоугольника для лица TRect FaceRect, ClientRect = GetClientRect();

int iDiameter = min(ClientRect.right, ClientRect.bottom);

FaceRect.left = (ClientRect.right - iDiameter)/ 2;

FaceRect.top = (ClientRect.bottom — iDiameter)/ 2;

FaceRect.right = FaceRect.left + iDiameter;

FaceRect.bottom = FaceRect.top + iDiameter;

// Масштабируем прямоугольник. Пересчитываем диаметр лица // (он понадобится в последующей части кода) ScaleRect(FaceRect) ;

iDiameter = min(FaceRect.right — FaceRect.left, FaceRect.bottom — FaceRect.top);

// Исходя из размеров лица устанавливаем толщину линий.

// Это поможет избежать огромных губ и глаз на маленьком лице

// (или маленьких губ и глаз на большом лице). /

// Толщина линии определяется как 1/2 процента от диаметра лица.

// Устанавливаем также желтую кисть.

int iLineWidth = iDiameter * .05;

if (iLineWidth < 1) , iLineWidth = 1;

dc.SelectObject(TPen(TColor::Black, iLineWidth, PS_INSIDEFRAME));

dc.SelectObject(TBrushfTColor::LtYellow)) ;

// Рисуем лицо dc.Ellipse(FaceRect);