Руководство по программированию с wxWidgets (10. Контексты устройств) |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translation complete.
Контексты устройств.
GDI (интерфейс графических устройств) - это интерфейс для работы с графикой. Он используется для взаимодействия с графическими устройствами, такими как монитор, принтер или файл. GDI позволяет программистам выводить данные на экран или принтер, не беспокоясь о деталях конкретного устройства. GDI изолирует программиста от железа.
С точки зрения программиста, GDI - это группа классов и методов для работы с графикой. GDI содержит двухмерную векторную графику, шрифты и изображения.
Для начала, мы должны создать объект контекста устройства (КУ). В wxWidgets контекст устройства называется wxDC. Документация определяет wxDC как контекст устройства, на которое возможен вывод графики и текста. Он представляет номер устройства в общем виде. Одна и та же часть кода может быть написана для различных видов устройств. Будь то экран или принтер. wxDC не предназначен для прямого использования. Вместо этого программист должен выбрать один из производных классов. Каждый такой класс предназначен для использования в конкретных условиях.
Производные классы wxDC:
* wxBufferedDC (Буферизированный)
* wxBufferedPaintDC (Буферизированная краска)
* wxPostScriptDC (ПостСкрипт)
* wxMemoryDC (Память)
* wxPrinterDC (Принтер)
* wxScreenDC (Экран)
* wxClientDC (Клиент)
* wxPaintDC (Краска)
* wxWindowDC (Окно)
wxScreenDC используется для рисования на экране. wxWindowDC используется если нам нужно нарисовать целое окно (только для Windows), включая декорации. wxClientDC используется для прорисовки клиентской области окна. Клиентская область - это часть окна без декораций (заголовок, окантовка). wxPaintDC используется только для wxPaintEvent. wxClientDC напротив никогда не используется для wxPaintEvent. wxMemoryDC используется для рисования графики в растровый рисунок. wxPostScriptDC используется для записи в PostScript файлы на любых платформах. wxPrinterDC используется для получение доступа к принтеру (только в Windows).
Простая линия
Начнём с рисования линии.
В нашем примере мы нарисовали простую линию в клиентской области окна. Если мы изменяем размеры окна, то рисунок перерисовывается. Генерируется wxPaintEvent и линия перерисовывается снова.
void OnPaint(wxPaintEvent& event);
Here we declare a OnPaint() event handler function.
this->Connect(wxEVT_PAINT, wxPaintEventHandler(Line::OnPaint));
Мы соединили событие paint с методом OnPaint(). Всё рисование происходит в обработчике OnPaint().
wxPaintDC dc(this);
Мы определили контекст устройства wxPaintDC. Этот контекст используется для обращения к окну внутри wxPaintEvent.
wxCoord x1 = 50, y1 = 60;
wxCoord x2 = 190, y2 = 60;
Мы определили четыре координаты.
dc.DrawLine(x1, y1, x2, y2);
Мы рисуем простую линию вызывая метод DrawLine().
Рисование текста.
Нарисовать текст в окне просто.
В нашем примере мы рисуем текст Lev Nikolayevich Tolstoy, Anna Karenina русскими буквами в окне.
dc.DrawText(wxT("Лев Николaевич Толстoй"), 40, 60);
dc.DrawText(wxT("Анна Каренина"), 70, 80);
Метод DrawText() рисует текст в окне. Он рисует текстовую строку в указанной точке, используя заданный шрифт, цвет и фон. Благодаря макросу wxT() мы можем использовать русский алфавит прямо в коде. Этот макрос идентичен макросу to_T(). Он позволяет использовать строчные литералы из юникода. Когда юникод задействован, он добавляет L к строке литералов делая их расширенными символьными строковыми константами.
Точка
Простейшим графическим объектом является точка. Это просто маленькое кругленькое пятнышко в окне.
DrawPoint(int x, int y)
Этот метод рисует точку с координатами x, y.
Одну точку не так то легко увидеть. Поэтому мы создадим 1000 точек. Каждый раз, когда размеры окна будут меняться, мы будет рисовать 1000 точек в клиентской части окна.
wxSize size = this->GetSize();
Здесь мы получили размер окна.
x = rand() % size.x + 1;
Здесь мы получаем случайное число в диапазоне от 1 до size.x.
Перо
Перо - это элементарный графический объект. Он используется для рисования различных линий и контуров прямоугольников, эллипсов, многоугольников и других форм.
wxPen(const wxColour& colour, int width = 1, int style = wxSOLID)
Конструктор wxPen имеет три параметра. Цвет (colour), ширина (width) и стиль (style).
* wxSOLID (сплошной)
* wxDOT (пунктир)
* wxLONG_DASH (длинное тире)
* wxSHORT_DASH (короткое тире)
* wxDOT_DASH (точка тире)
* wxTRANSPARENT (прозрачный)
В нашем примере мы нарисуем 6 прямоугольников перьями различных стилей. Последний прозрачный - его не видно.
dc.SetPen(wxPen(col1, 1, wxSOLID));
dc.DrawRectangle(10, 15, 90, 60);
Здесь мы определили перо для первого прямоугольника. Мы установили цвет col1(#ocococ), ширину в 1 пиксель, стиль - solid. Метод DrawRectangle() рисует прямоугольник.
Области
Области могут комбинироваться для создания более сложных форм. Существует четыре способа их комбинации: Объединение (Union), Перекрытие (Intersect), Вычитание (Substract) и Исключение (Xor). В следующем примере мы проиллюстрируем все четыре способа.
Гадиент
В компьютерной графике градиент это плавный переход от белого к черному или из одного цвета в другой. В программах для двухмерной графики градиент используется для создания красочного фона, а так же для различных эффектов, например для передачи света и тени.
void GradientFillLinear(const wxRect& rect, const wxColour& initialColour,
const wxColour& destColour, wxDirection nDirection = wxEAST)
Этот метод заливает область, определённую с помощью rect, линейным градиентом, начиная с initialColour и заканчивая destColour. Параметр nDirection определяет направление изменения цвета, по-умолчанию установлено значение wxEAST.
Формы
Формы - более сложные геометрические объекты. Мы нарисуем различные геометрические формы в следующем примере.
