Перед створенням зображення з використанням бібліотеки wxWidgets потрібно створити об'єкт визначення пристрою (device context, DC). Такий об'єкт у wxWidgets називають wxDC. Його не призначено для безпосереднього використання, замість нього потрібно вибрати один з похідних класів:
Кожен похідний клас призначено для використання у певних умовах:
WxScreenDC використовують для малювання скрізь на екрані;
WxWindowDC використовують для малювання у всьому вікні (лише для Windows). Це включає також оформлення вікон;
WxClientDC використовують для малювання у клієнтській області вікна, тобто області вікна без його декорацій (заголовку й меж);
WxPaintDC використовують для малювання у клієнтській області таким застереженням:
WxPaintDC потрібно використовувати лише з wxPaintEvent;
WxClientDC непотрібно використовувати з wxPaintEvent;
WxMemoryDC використовують для нанесення графіки на растрові зображення;
WxPostScriptDC використовують для запису на файли PostScript на будь-якій платформі;
WxPrinterDC використовують для доступу до принтера (лише для Windows).
Методи (функції) одного класу можуть виявитися непридатними до методів іншого. Тому при створенні одного видимого зображення, яке потрібно опрацювати, насправді потрібно створити 4 об'єкти таких класів:
Описане вище можна подати такою схемою.
*.bmp, *.gif, *.ico, *.jpeg, *.pcx, *.png, *.tiff | → | wxBitmap ↓ | ~ | wxMemoryDC | → | wxImage |
wxPaintDC |
На схемі символом ~ позначено можливість задання еквівалентності вмісту, стрілками — напрям можливого перенесення даних, зеленим кольором — можливість малювання, червоним кольором — можливість аналізу інтенсивності кольорів моделі RGB окремих пікселів.
Рекомендований порядок роботи із зображеннями
Примітка. Пункт 6 можна перенести на місце пункту 4.
Опис класу wxDC на сторінці офіційного сайту проекту wxWidgets не дає простих і зрозумілих для початківця вказівок, як імпортувати, створювати, подавати й опрацьовувати зображення. Альтернатива, реалізована у цій публікації, полягає в ознайомленні з конкретними прокоментованими прикладами кодів, які істотно коротші від перелічених в описі на сайті проекту.
Приклад побудови графічних примітивів
— див. вказівки наприкінці коду. Пояснимо, які значення можна надати властивостям об'єктів, зображеним на попередньому малюнку вище.
Родини шрифтів
Стилі написання
Види наповнення
Pen (перо) використовують для зображення ліній (прямих і кривих), контурів многокутників і еліпсів,
Налаштування Pen здійснюють такою вказівкою:
wxPen(const wxColour& colour, int width = 1, int style = wxSOLID)
Вона має такі три агрументи (перелічено у порядку запису, вказано значення як усталено): колір, ширина і стиль. Вище в описі вказівки wxPen вказано значення як усталено. У коді стиль не задано.
Стилі Pen:
Приклад використання стилів Pen
— див. вказівки наприкінці коду, в якому кольору заповнення надано прозорості (*wxTRANSPARENT_BRUSH). Це зроблено з метою не відволікати увагу від стилю контура. Але колір заповнення може бути іншим.
Вбудовані (стандартні) кольори заповнення
Приклад використання градієнтів
— див. вказівки наприкінці коду.
Приклад побудови фігур
— див. вказівки наприкінці коду.
Приклад відображення малюнків
— див. вказівки наприкінці коду.
Приклад поточкового опрацювання побудованого малюнку
— див. вказівки наприкінці коду.
Використані джерела
Device Contexts in wxWidgets
Drawing on a panel with a DC
An image panel
Drawing and Printing in C++ with wxWidgets
Руководство по wxWidgets