Українська
Підсумки
Висновки
Windows Forms малює графіку засобами GDI+ через об’єкт Graphics, який можна отримати для вікна (у події Paint), для растрового зображення (Graphics.FromImage) і для сторінки принтера (PrintPage). Зображення вікна не зберігається, тому програма зберігає дані в полях, малює все в OnPaint, а після зміни даних викликає Invalidate(). Контури малюються перами, заливки – пензлями п’яти видів, текст – методом DrawString з вирівнюванням StringFormat і вимірюванням MeasureString. Пера, пензлі, шрифти й зображення займають ресурси операційної системи і звільняються оператором using. Перетворення координат і клас Matrix дозволяють малювати в зручній системі координат, GraphicsPath і Region – будувати складені фігури, перевіряти влучання миші та обмежувати область малювання. Анімація будується на таймері, а подвійна буферизація усуває мерехтіння. Малюнок, описаний як список об’єктів-фігур, легко редагувати мишею, зберігати в PNG, друкувати й оформлювати у вигляді власного елемента керування.
Питання для самоперевірки
- Що таке GDI+? Які простори імен містять його класи? На яких ОС він працює?
- Яке призначення класу
Graphics? На яких поверхнях він може малювати? - Коли генерується подія
Paint? Чим обробникPaintвідрізняється від перевизначенняOnPaint? - Чим відрізняються методи
Invalidate,UpdateіRefresh? - Чому не можна малювати через
CreateGraphicsв обробнику кнопки? - Як спрямовані осі екранної системи координат? Що таке клієнтська область?
- Які властивості має перо
Pen? Які види пензлів є в GDI+? - Чому пера та пензлі потрібно звільняти? Які об’єкти звільняти не можна?
- Як вивести текст, вирівняний по центру прямокутника? Для чого метод
MeasureString? - Як працюють методи
TranslateTransform,RotateTransform,ScaleTransform? Чому важливий їх порядок? - Що таке
GraphicsPath? Як перевірити, чи потрапив курсор миші у фігуру? - Що таке мерехтіння і як його усунути?
- Як зберегти малюнок у файл PNG? Чим PNG відрізняється від JPEG?
- Як надрукувати кілька сторінок за допомогою
PrintDocument? - Як створити власний елемент керування? Для чого атрибути
[Category],[Description],[DefaultValue]?
Корисні посилання
- Документація Windows Forms: https://learn.microsoft.com/dotnet/desktop/winforms/
- Графіка та малювання у Windows Forms: https://learn.microsoft.com/dotnet/desktop/winforms/advanced/graphics-and-drawing-in-windows-forms
- Клас
Graphics: https://learn.microsoft.com/dotnet/api/system.drawing.graphics - Малювання власних елементів керування: https://learn.microsoft.com/dotnet/desktop/winforms/controls/custom-painting-drawing
- Подвійна буферизація: https://learn.microsoft.com/dotnet/desktop/winforms/advanced/how-to-reduce-graphics-flicker-with-double-buffering-for-forms-and-controls
- Системи координат і перетворення: https://learn.microsoft.com/dotnet/desktop/winforms/advanced/coordinate-systems-and-transformations
- Клас
GraphicsPath: https://learn.microsoft.com/dotnet/api/system.drawing.drawing2d.graphicspath - Клас
PrintDocument: https://learn.microsoft.com/dotnet/api/system.drawing.printing.printdocument - Власні елементи керування: https://learn.microsoft.com/dotnet/desktop/winforms/controls/custom
System.Drawing.Commonлише для Windows: https://learn.microsoft.com/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only