- •Графический интерфейс пользователей
- •Объектная модель программы
- •Основной элемент графического интерфейса – окна (windows)
- •Отношения между окнами
- •Типы окон
- •Программирование графического интерфейса (gui)
- •Содержание окна
- •Контекстное меню (ContextMenuStrip)
- •Библиотека api функций для рисования gdi32.Dll
- •Основной класс рисования Graphics
- •Основные методы класса Graphics
- •Получение объекта Graphics
- •Событие Paint
- •Выполнение рисования
- •Система координат. Система координат и единиц измерения
- •Классы для описания геометрических объектов
- •Операции с изображениями
- •Курсор мыши
- •Основные события устройства «мышь»
- •Размер окна
- •Свойство Anchor
- •Компоненты
- •Элементы управления для работы с принтером – Printing
- •Автоматизация создания программы
- •Окно списков ListBox
- •Коллекция элементов ListBox
- •Комбинированные окна ComboBox
- •Элемент CheckedListBox
- •Класс PictureBox
- •Элемент управления WebBrowser
- •Элемент управления ProgressBar
- •Элемент NumericUpDown
- •Подсказки – ToolTip
- •Процессы и потоки
- •Виды многопоточности:
- •Преимущества многопоточности
- •Случаи использования многопоточности:
- •Потоки в с#
- •Основные статические свойства:
- •Недостатки многопоточности
- •Методы управления потоками
- •Свойства потока.
- •Приоритеты потоков
- •Передача данных в ThreadStart
- •Управление потоками
- •Ресурсы, требующие синхронизации:
- •Простейшие методы блокировки.
- •Оператор lock
- •Класс Interlocked
- •Класс Monitor
- •Классы ManualResetEvent и AutoResetEvent
- •Атрибут [Synchronization]
- •Константы:
- •Минимально необходимые действия для использования BackgroundWorker:
- •Чтобы добавить отображение выполнения операции:
- •Чтобы иметь возможность отмены операции:
- •Задачи (класс Task)
- •Статусы задачи
- •Применение идентификатора задачи
- •Методы ожидания завершения задачи
- •Класс TaskFactory
- •Работа с данными в задаче
- •Вложенные задачи.
- •Механизм отмены задач.
- •Создание продолжения задачи
- •Шаблоны параллелизма Parallel
- •Метод For()
- •Досрочный выход из цикла
Библиотека api функций для рисования gdi32.Dll
Библиотека GDI это набор функций для вывода на внешние устройства. Они предоставляют уровень абстракции, скрывающий различие между разными видео картами или принтерами.
Программист просто вызывал нужную функцию Windows API для выполнения требуемой работы и GDI определял, как выполнить ее для конкретной видео карты.
Если пользователь имел несколько устройств отображения, например, дисплеи и принтеры, то GDI позволяет показать на экране, как будет выглядеть результат вывода на принтер.
Для вывода на принтер вместо дисплея достаточно только указать Операционной Системе, что устройством вывода является принтер и затем использовать те же функции API, которые использовались и для дисплея.
Библиотека GDI предоставляет достаточно высоко-уровневый API для разработчиков, но все равно этот API основывается на наборе C – подобных функций.
Основной класс рисования Graphics
Рисование на поверхности формы (ЭУ) можно выполнить только с помощью объекта класса Graphics.
Объект класса Graphics позволяет выполнять рисование на заданной поверхности (в окне формы, вывод на принтер или плоттере).
Реализует интерфейс IDeviceContext, который включает методы для получения и освобождения существующего указателя на контекст устройства операционной системы (Windows device context, hdc - handle of context device)
Использует интерфейс (набор функций) Graphic Device Interface + (GDI+)
Пространство имен: System.Drawing (Сборка: System.Drawing.dll).
Класс Graphics включает 72 метода и 18 свойств.
Основные методы класса Graphics
void Clear (Color clr) - закраска окна
DrawString(…) – рисование текста
DrawLine(…) – рисование линий
DrawRectangle(…) – рисование прямоугольников
DrawEllipse(…) – рисование эллипсов
DrawCurve(…) – рисование кривых
DrawPoligon(…) – рисование многоугольников
DrawPie(…) – рисование секторов круга
…
Получение объекта Graphics
Можно получить ссылку на объект Graphics используя объект формы (или экземпляр производный от Control) с помощью метода CreateGraphics():
Graphics gfx = frm.CreateGraphics(); // получение объекта
…
gfx.Dispose(); // уничтожение объекта
В обработчик события Paint объект Graphics передается с помощью параметра PaintEventArgs в виде свойства Graphics
Событие Paint
OC рисует все элементы окна, кроме клиентской области
Когда ОС определяет, что нужно перерисовать поверхность клиентской области, то она посылает приложению, которое владеет данным окном сообщение WM_PAINT.
После получения сообщения WM_PAINT класс Control инициирует событие Paint.
При обработке этого события программа должна заново нарисовать содержание окна, или отдельную его область.
Программа может сама вызвать создание события WM_PAINT используя метод класса Control :
Invalidate() или Invalidate(Rectangle rec)
Выполнение рисования
Рисовать можно в любом методе класса на поверхности любого окна на которое есть ссылка (например frm).
Используя ссылку frm нужно получить объект Graphics для данной формы:
Graphics gfx = frm.CreateGraphics(); // получение объекта
Используя данный объект можно выполнять рисование.
Следует помнить, что если пользовательская область окна портится (Invalidated), то для ее восстановления ОС посылает сообщение WM_PAINT (событие Paint).
Обработчик события Paint должен заново нарисовать пользовательскую область.
Если требуется в окне что-то, что должно сохраняться при порче окна, то оно должно рисоваться в обработчике события Paint.
