<< Пред.           стр. 16 (из 32)           След. >>

Список литературы по разделу

 // сбрасываем установленные параметры
 gc.Reset();
 // рисуем третий прямоугольник, используя конструктор // TRect(const TPointS aPoint, const TSizeS aSize)
 // координаты верхнего левого угла
 TPoint pointTopLeft3 (90, 20);
 // размер прямоугольника
 TSize sizeRect3(/*x*/50, /*y*/100) ;
 // светло-серый цвет
 TRgb colorGreylO = AKN_LAF_COLOR(KGreyl0);
 // цвет кисти
 gc.SetBrushColor(colorGreylO);
 // закрашиваем кистью прямоугольник
 gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
 // задаем размер третьему прямоугольнику
 TRect drawRect3(pointTopLeft3, sizeRect3);
 // рисуем третий прямоугольник
 gc.DrawRect(drawRect3);
 // рисуем четвертый прямоугольник, используя конструктор
 // TRect(const TPointS aPoint, const TSizeS aSize)
 / / ,
 / / ~~
 // координаты верхнего левого угла TPoint pointTopLeft4 (20, 100); // размер прямоугольника TSize sizeRect4 (50, 30); // черный цвет для бордюра TRgb colorBlack = AKN_LAF_COLOR(KBlack); // определяем толщину бордюра ¦
 
 TSize penSizeRect4(8, 8);
 // задаем толщину бордюра
 gc.SetPenSize(penSizeRect4);
 // устанавливаем цвет бордюру
 gc.SetPenColor(colorBlack);
 // темно-желтый цвет для кисти
 TRgb colorKDarkYellov = AKN_LAF_COLOR(KDarkYellov);
 // устанавливаем цвет кисти
 gc.SetBrushColor(colorKDarkYellov);
 // закрашиваем кистью прямоугольник
 gc . SetBrushStyle (CGraphicsContext: .-ESolidBrush) ;
 // задаем размер четвертому прямоугольнику
 TRect drawRect4(pointTopLeft4, sizeRect4);
 // рисуем четвертый прямоугольник
 gc.DrawRect(drawRect4);
 } //**********************************************************
  В начале исходного кода создаются пять констант для работы с цветом: синим, темно-лиловым, одной из градаций серого, черным и темно-желтым. Далее в функции Draw () рисуются четыре разных прямоугольника.
  Первый прямоугольник при создании объекта drawRectl класса TRect использует конструктор из четырех целочисленных значений (по осям X и Y), на пересечении которых создаются точки, и рисуется прямоугольник. В качестве цвета линий задан синий цвет. Толщина линий не задана, а значит по умолчанию это один пиксель. Если так же не указать цвет для линий, то по умолчанию это черный цвет.
  При прорисовке второго прямоугольника используется конструктор класса TRect с двумя параметрами на основе класса TPoint. Создается точка для левого верхнего угла с координатами (30,40) и для нижнего правого угла с координатами (60, 80) пикселей. Для прямоугольника устанавливается толщина линии в (6, 6) пикселей и закрашивается этот бордюр темно-лиловым цветом. В конце исходного кода для создания второго прямоугольника используется функция Reset (): gc.Reset ();
  Эта функция сбрасывает все настройки, в данном случае для толщины и цвета бордюра. Если не вызывать эту функцию, то установленные значения будут действовать и для следующего исходного кода, описывающего создания той или иной фигуры, пока не будет вызвана функция Reset ().
  Третий прямоугольник рисуется с помощью конструктора класса TRect. TRect (const TPoints aPoint, const TSize& aSize)
  Создается точка для верхнего левого угла и размер прямоугольника по ширине и высоте, на основании этих данных и происходит построение третьего прямоугольника. Чтобы закрасить внутреннее пространство прямоугольника в серый цвет, применяется кисть (Brush).
 
 gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
  Но при этом все равно автоматически прорисовывается бордюр прямоугольника шириной в один пиксель черного цвета. Если вы захотите закрасить прямоугольник, круг, эллипс или любой другой графический элемент, то перед закрашиванием фигуры кистью напишите следующую строку кода: gc.SetPenStyle(CGraphicsContext::ENullPen) ;
 Тем самым вы сбросите прорисовку контура фигуры.
  Последний прямоугольник так же рисуется с помощью класса TSize, но с толстым бордюром в (8, 8) пикселей черного цвета. А внутреннее пространство прямоугольника закрашивается в темно-желтый цвет. На рис. 9.4 изображена работа программы RectTest.
 
 
  Рис. 9.4. Работа программы RectTest
 
 9.3. Рисуем эллипс
  Рисование эллипса происходит классом TRect. Первоначально происходит определение формы эллипса с помощью прямоугольника. Создавая прямоугольник с заданным размером и координатами, вы задаете площадь на экране для последующей отрисовки эллипса. Центр эллипса будет располагаться в центре прямоугольника, а его контур будет касаться сторон прямоугольника, учитывая особенность его формы. Сам прямоугольник не рисуется на экране, а лишь определяет площадь для формирования эллипса. Вместо эллипса можно нарисовать, например, окружность, если все стороны прямоугольника сделать равными.
  Перейдем к примеру EllipsTest, где рисуются три разных по размеру и цвету эллипса. Пример находится на компакт-диске в папке \Code\EllipsTest, рассмотрим его содержимое:
 // файл Test_AppView.срр
 // реализация класса CTestAppView
 // рисуем три эллипса на экране
 // подключаем системные библиотеки
 #include
 tinclude
 #include
 // подключаем файл ресурса
 tinclude
 // подключаем заголовочный файл
 #include "Test_AppView.h"
 // цветовые константы
 
 const Tint KOrange = 23; const Tint KGreen2 = 159;
 // двухфазный конструктор
 CTestAppView* CTestAppView::NewL(const TRect& aRect)
 {
 CTestAppView* self = CTestAppView::NewLC(aRect);
 CleanupStack::Pop (self);
  return self; }
 // двухфазный конструктор
 CTestAppView* CTestAppView::NewLC(const TRects aRect) {
 CTestAppView* self = new (ELeave) CTestAppView;
 CleanupStack::PushL(self);
 self->ConstructL(aRect);
  return self; }
 // двухфазный конструктор
 void CTestAppView::ConstructL(const TRects aRect) {
 // создаем окно CreateWindowL();
 // определяем клиентскую область SetRect(aRect);
 // активизируем механизм прорисовки ActivateL(); }
 // конструктор CTestAppView::CTestAppView() { }
 // деструктор
 CTestAppView::-CTestAppView() { }
 // рисуем на экране
 void CTestAppView::Draw(const TRectS /*aRect*/) const {
 // получаем графический контекст окна
 CWindowGcS gc = SystemGcO;
 // очищаем клиентскую область окна
 gc.Clear();
 
 / /
 // рисуем первый эллипс
 
 // левый верхний угол прямоугольника
 TPoint pointBeginl (10, 10);
 // правый нижний угол прямоугольника
 TPoint pointEndl(40, 60);
 // создаем прямоугольник
 TRect drawRectl(pointBeginl, pointEndl);
 // рисуем в прямоугольнике эллипс
 gc.DrawEllipse(drawRectl);
 / /
 / /
 // рисуем второй эллипс
 // левый верхний угол прямоугольника
 TPoint pointBegin2 (50, 20);
 // правый нижний угол прямоугольника
 TPoint pointEnd2(80, 80);
 // оранжевый цвет для эллипса
 TRgb colorOrange = AKN_LAF_COLOR(KOrange) ;
 // толщина бордюра у эллипса
 TSize penSizeRect2 (4, 8);
 // устанавливаем толщину
 gc.SetPenSize(penSizeRect2) ;
 // задаем цвет бордюру эллипса
 gc.SetPenColor(colorOrange);
 // создаем второй прямоугольник
 TRect drawRect2(pointBegin2, pointEnd2);
 // рисуем в прямоугольнике эллипс
 gc.DrawEllipse(drawRect2);
 // сбрасываем установленные параметры
 gc.Reset();
 // рисуем третий эллипс
 / / ¦
 // координаты верхнего левого угла
 TPoint pointTopLeft3(90, 20);
 // размер прямоугольника для эллипса
 TSize sizeRect3(50, 100);
 // светло зеленный цвет
 TRgb colorGreen2 = AKN_LAF_COLOR(KGreen2);
 // цвет кисти
 gc.SetBrushColor (colorGreen2);
 // закрашиваем кистью эллипс
 
 gc.SetBrushStyle(CGraphicsContext::ESolidBrush); // задаем размер третьему прямоугольнику TRect drawRect3(pointTopLeft3, sizeRect3); // рисуем эллипс gc.DrawEllipse(drawRect3);
 } у/**********************************************************
  В качестве цвета для эллипсов используется оранжевый и зеленый цвета. В функции Draw () происходит создание и отрисовка трех эллипсов.
  Первый эллипс формируется при помощи конструктора класса TRect с двумя параметрами класса TPoint. После того, как создан прямоугольник с заданными размерами, происходит вызов функции DrawEllipse (): gc.DrawEllipse(drawRectl);
  В качестве параметра, функция принимает созданный прямоугольник, который представлен объектом drawRectl класса TRect. Все остальные действия по прорисовке эллипса происходят автоматически на основании размеров прямоугольника. Цвет и контурная линия заданы не были, а значит, толщина линии будет в один пиксель черного цвета.
  Второй эллипс рисуется большего размера и имеет бордюр толщиной в (4, 8) пикселей. Два значения - 4 и 8 - это ширина рисуемого бордюра. Контур получается достаточно толстый, поэтому мы его закрасим в ярко-оранжевый цвет. В конце исходного кода по созданию второго эллипса вызывается функция Reset () для сброса установленных параметров для цвета и толщины линии.
 
  Последний эллипс создан на основе конструктора класса TRect с параметрами, использующими классы TPoint и TSize, в которых задается левый верхний угол прямоугольника и его размер по ширине и высоте. Третий эллипс, вписанный в прямоугольник размером 50 на 100 пикселей, и закрашивается кистью в зеленый цвет: gc.SetBrushColor (colorGreen2); gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
  Рис. 9.5. Работа программы EllipsTest
  После этого он рисуется на экране при помощи функции gc.DrawEllipse(drawRect3);
 На рис. 9.5 изображена работа программы EllipsTest.
 9.4. Рисуем часть круга
  В английском языке есть слово Pie (пирог) и именно это слово имеет в своем названии функция DrawPie (), отвечающая за отрисовку фигуры, похожей на пирог с вырезанным треугольным кусочком. Применительно к программированию слово "пирог" звучит весьма необычно, поэтому дадим этой фигуре название часть круга.
 
  Чтобы нарисовать часть круга необходимо, так же как и в случае с эллипсом, создать прямоугольную площадь, внутри которой и рисуется часть круга. Функция DrawPie () содержит три параметра:
 ? KPieRect - прямоугольная площадь, внутри которой рисуется часть круга на основе класса TRect;
 ? pieStartPoint - двойка целочисленных значений, определяемых с по
 мощью класса TPoint, задающих начальную точку для части круга;
 ? pieEndPoint - целочисленное значение на основе класса TPoint, зада
 ющее конечную точку для части круга.
  С помощью первого параметра создается невидимый прямоугольник, внутри которого будет рисоваться часть круга. Стартовая точка pieStartPoint задает точку в пространстве площади прямоугольника по контуру рисуемого круга. Вторая точка pieEndPoint задает конец окружности и между первой и второй точками против часовой стрелки прорисовывается часть круга.
  Перейдем к демонстрационной программе PieTest, иллюстрирующей принципы создания части круга. На компакт-диске программа находится в папке \Code\PieTest. В файле Test_AppView.cpp располагается основной код приложения, рассмотрим его.
 // файл Test_AppView.cpp
 // реализация класса CTestAppView
 // рисуем часть круга у/*******************************************************
 // подключаем системные библиотеки
 #include
 #include
 #include
 // подключаем файл ресурса
 #include
 // подключаем заголовочный файл
 tinclude "Test_AppView.h"
 // цветовые константы const Tint KOrange = 23; const Tint KGreen2 = 159;
 // двухфазный конструктор
 CTestAppView* CTestAppView::NewL(const TRectS aRect)
 {
 CTestAppView* self = CTestAppView::NewLC(aRect);
 CleanupStack::Pop(self);
  return self; }
 
 // двухфазный конструктор
 CTestAppView* CTestAppView::NewLC(const TRects aRect)
 {
 CTestAppView* self = new (ELeave) CTestAppView;
 CleanupStack::PushL(self);
 self->ConstructL(aRect);
  return self; }
 // двухфазный конструктор
 void CTestAppView::ConstructL(const TRectS aRect) {
 // создаем окно CreateWindowL();
 // определяем клиентскую область SetRect(aRect);
 // активизируем механизм прорисовки ActivateL(); }
 // конструктор CTestAppView::CTestAppView() { }
 // деструктор
 CTestAppView::~CTestAppView() { }
 // рисуем на экране void CTestAppView::Draw(const TRect& /*aRect*/) const
 {
 // получаем графический контекст окна CWindowGcS gc = SystemGcO; , // очищаем клиентскую область окна gc.Clear ();
 / /=== = ======:===:=== = = = ==== === = =: = = =: = === = = = -=== = = = = :=:==== =
 // рисуем часть круга
 // координаты верхнего левого угла
 TPoint pointTopLeftl (10, 20);
 // размер прямоугольника
 TSize sizeRectl(80, 80);
 // светло-зеленный цвет
 TRgb colorGreen2 = AKN_LAF_COLOR(KGreen2);
 // толщина линии
 TSize penSizeRectl(4, 4);
 
 // устанавливаем толщину
 gc.SetPenSize(penSizeRectl);
 // устанавливаем цвет
 gc.SetPenColor(colorGreen2);
 // рисуем прямоугольник
 TRect drawRectl(pointTopLeftl, sizeRectl);
 // начальная точка
 TPoint pointBeginl(10, 20);
 // конечная точка
 TPoint pointEndl(80, 20);
 // рисуем кусок круга
 gc.DrawPie(drawRectl,pointBeginl, pointEndl);
 // сброс настроек
 gc.Reset();
 // рисуем вторую часть круга
 / /
 // координаты верхнего левого угла
 TPoint pointTopLeft2 (100, 40);
 // размер прямоугольника
 TSize sizeRect2(60, 60);
 // оранжевый цвет
 TRgb colorOrange = AKN_LAF_COLOR(KOrange);
 // устанавливаем цвет для кисти
 gc.SetBrushColor(colorOrange);
 // назначаем цвет кисти пирогу
 gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
 // рисуем прямоугольник
 TRect drawRect2(pointTopLeft2, sizeRect2);
 // начальная точка
 TPoint pointBegin2(10, 30);
 // конечная точка
 TPoint pointEnd2(50, 0);
 // рисуем часть круга
 gc.DrawPie(drawRect2, pointBegin2, pointEnd2);
 } /у*******************************************************
  Для первой части круга прямоугольная площадь задается размером 80 х 80 пикселей, создается бордюр (4, 4) и закрашивается в светло-зеленый цвет. Прямоугольник для части круга формируется на основе класса TRect с конструктором из двух параметров - TPoint и TSize, но выбор конструктора особого значения не имеет. Можно использовать любой удобный для вас конструктор при создании объекта класса TRect.
 
 
  Затем с помощью строки кода: gc.DrawPie(drawRectl, pointBeginl, pointEndl);
 рисуется первая часть круга и происходит сброс настроек цвета и бордюра функцией Reset ().
  Вторая часть круга рисуется аналогичным образом, но с меньшим размером - 60 х 60 пикселей, пространство внутри части круга закрашивается в оранжевый цвет. На рис. 9.6 показан результат работы приложения PieTest.
 
 9.5. Текст и шрифт
 
 Рис. 9.6. Рисуем часть круга
 
  Очень часто требуется выводить любые виды текстовых сообщений на экран для информирования пользователя, например, о количестве набранных очков в игре, оставшихся патронах или других информационных сообщений.
  Работа с текстом в Symbian OS построена на использовании системных классов и отличается особой простотой. Давайте перейдем к примеру Text Test, который находится на компакт-диске в папке \Code\TextTest.
  Так же как и в случае с рисованием графики, основные действия происходят в файле Test_AppView.cpp в функции Draw (). Рассмотрим исходный код файла Test_AppView.cpp проекта TextTest, иллюстрирующий простейший способ вывода текста на экран телефона.
 /у*******************************************************
 // файл Test_AppView.срр
 // реализация класса CTestAppView
 // текст
 / у*******************************************************
 // подключаем системные библиотеки
 #include
 #include
 tinclude
 #include
 // подключаем файл ресурса
 #include
 // подключаем заголовочный файл
 #include "Test_AppView.h"
 // двухфазный конструктор
 CTestAppView* CTestAppView::NewL(const TRectS aRect)
 {
 CTestAppView* self = CTestAppView::NewLC(aRect); CleanupStack::Pop(self);
 
  return self; }
 // двухфазный конструктор
 CTestAppView* CTestAppView::NewLC(const TRectS aRect) {
 CTestAppView* self = new (ELeave) CTestAppView;
 CleanupStack::PushL(self);
 self->ConstructL(aRect);
  return self; }
 // двухфазный конструктор
 void CTestAppView::ConstructL(const TRect& aRect) {
 // создаем окно CreateWindowL();
 // определяем клиентскую область SetRect(aRect);
 // активизируем механизм прорисовки ActivateL(); }
 // конструктор CTestAppView::CTestAppView() { }
 // деструктор
 CTestAppView::~CTestAppView() { }
 // рисуем на экране
 void CTestAppView::Draw(const TRectS /*aRect*/) const {
 // получаем графический контекст окна
 CWindowGc& gc = SystemGcO;
 // очищаем клиентскую область окна

<< Пред.           стр. 16 (из 32)           След. >>

Список литературы по разделу