// Конструктор 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);