23. Вывод на экран. Контекст устройства. Классы контекстов устройства в mfc.
Большинство приложений нуждается в выводе определенной информации на экран. На первый взгляд кажется, что, поскольку Windows является системой, не зависящей от аппаратных средств, сформировать изображение на экране для нее не сложно. Однако на деле именно эта "независимость" и перекладывает большую часть нагрузки на плечи программиста. Вы не знаете, с устройством какого типа придется иметь дело вашему приложению, но должны задать все необходимые параметры для его настройки. Средства вывода работают с аппаратурой через промежуточное звено, которое называется контекстом устройства (device context — DC).
Независимость Windows от аппаратных средств, с одной стороны, причиняет программисту головную боль в связи с усложнением методики программирования операций отображения информации, и, с другой стороны, избавляет от необходимости настраивать программу на каждый новый вариант аппаратуры отображения. В большинстве случаев Windows управляет устройствами посредством специальных программ — драйверов. Драйверы принимают информацию от приложения и передают соответственно этой информации данные конкретному устройству — монитору, принтеру или какому-нибудь другому устройству.
Связывается драйвер с приложением посредством специальной структуры данных, названной контекстом устройства.
Контекст устройства — это структура C++, которая содержит атрибуты рабочего поля окна. Эти атрибуты включают выбранное для текущей операции перо, кисть и шрифт. Контекст устройства в каждый момент времени располагает только одним пером, кистью или шрифтом. Если вам понадобится некоторую часть изображения нарисовать другим пером, например более толстым, придется, во-первых, создать такое новое перо, а во-вторых, внести его в контекст устройства вместо старого. Точно так, если вы хотите заливать контуры красной кистью, придется ее создать и "выбрать ее в контекст" — так программисты называют операцию замены инструмента в контексте устройства.
Рабочая область окна (window's client area) — это часть поверхности экрана, в которой можно отображать все, что посчитает нужным приложение: текст, таблицы данных, картинку и т.д. Определенную помощь в этом вам окажет библиотека MFC, которая инкапсулирует функции графического интерфейса Windows (Graphic Device Interface — gdi) в свои классы контекста устройств.
Контекст устройства также можно представить как лист бумаги, на котором будет производиться рисование.
Драйвер устройства - это специальная программа, которая умеет этот самый контекст перевести на конкретное устройство.
В MFC есть несколько контекстов устройств и все наследники от CDC.
CObject -
| |-> CClientDC
| |-> CWindowDC
CDC----->|-> CMetaFileDC
|-> CPaintDC
Каждый из контекстов рисует в определенном месте, то есть каждый контекст предназначен для рисования в определенной области. При этом CPaintDC и CClientDC очень похожи. Оба эти класса предназначены для рисования внутри клиентской области окна. То есть они не могут добраться до меню или рамки окна. Чем они отличаются?
CPaintDC используется только тогда когда отвечает на сообщение WM_PAINT. Вместе с этим сообщением будет передана та область, которая требует перерисовки. Ведь окно может быть на экране не полностью. Для извещения о перерисовке вызываются функции BeginPaint и EndPaint, без их вызова Windows будет считать, что перерисовка не произошла. Вот в этом и существенные отличия CPaint, в его конструкторе автоматически вызывается BeginPaint, а в деструкторе EndPaint. CClientDC не выполняет эти функции автоматически. CClientDC вызывает функцию GetDC, а деструктор ReleaseDC .
Если вы хотите получить доступ ко всему окну, то должны использовать класс CWindowDC этот класс позволит вам рисовать и поверх меню и везде в пределах рамки окна определенной при создании окна.
Контекст CMetaFileDC используется для работы с метафайлами, рисование из которых может выполняться многократно.
Функции, находящиеся в классе контекста устройства обеспечивают:
связь с физическим устройством
набор изобразительных средств
регулирование вывода
Смысл физической связи в том, что вы можете рисовать на устройстве, не заботясь о том, как это устройство физически работает. Например, монитор. Вас не интересует его производитель, марка и другие особенности. За это отвечает драйвер, связанный с контекстом устройства.
Набор изобразительных средств - это то, чем вы можете рисовать. Контекст устройства дает вам перья, кисти, умеет делать некоторые операции по рисованию примитивов. То есть он дает инструментарий по рисованию.
Регулировка вывода связана с необходимостью следить за тем, что часть экрана может перекрываться другими областями и поэтому в них рисовать нельзя.
- 1.Стандартный внешний вид окна приложения Windows.
- 1. Рамка
- 3. Интерфейс Visual Studio. Ресурсы приложения.
- 4. Интерфейс Visual Studio. Окно вывода Output.
- Окно редактирования текстов программ
- 5. Система меню. Меню File, Edit, View.
- Advanced… вывод на экран еще одного меню.
- 6. Система меню. Меню Insert, Project.
- 7. Система меню. Меню Build, Tools. Меню Build
- 8. Мастер создания приложения. Шаг 1,2.
- 9. Мастер создания приложения. Шаг 3,4.
- 10. Мастер создания приложения. Шаг 5,6,7.
- 11. Диалоговые окна и элементы управления
- 12. Формирование нового ресурса диалогового окна.
- 13. Задание идентификаторов диалогового окна.
- 14. Организация вывода диалогового окна на экран.
- 15.Использование элемента управления типа список
- Некоторые методы класса cListBox
- 16. Комбинированные списки (класс cCombobox).
- 17. Использование элементов типа переключатель Статические поля (класс static). Окна редактирования Edit Box. Методы класса cEdit.
- 19. Обработка сообщений. Карты сообщений.
- Некоторые макросы карты сообщений
- 20.Реал-ция обр-ки сообщ-й с пом.ClassWizard. Виды сообщ-й.
- Вкладки диалогового окна ClassWizard.
- Какой класс должен перехватывать сообщение
- Список сообщений
- 21. Команды. Реал-ция обр-ки команд с помощью ClassWizard
- Обновление команд.
- 22. Архитектура «Документ/представление».
- 23. Вывод на экран. Контекст устройства. Классы контекстов устройства в mfc.
- 24.Классы изобразительных средств. Примеры рисования простейших фигур.
- Рисование простейших фигур (пример)
- Изменение размеров и положения окна
- 25. Использование перьев. Работа с кистью.
- Работа с кистью
- 26. Концепция сохран.-восстановл. Объектов. Необходимые действия по сохр.-востан. Объектов класса cDocument. Разбор примера с сериализацией в классе документа.
- Создание класса, обеспечивающего сериализацию данных
- 27. Создание класса, обеспечивающего сохран.-восстан. Объектов. Разбор примера с сериализацией cMessage. Создание класса, обеспечивающего сериализацию данных
- 28. Непосредственное чтение и запись файлов. Класс сFile. Методы сFile. Режимы доступа к файлу.
- 29. Использование на примере основных методов класса cFile (открыть, записать, считать из файла). Использование стандартн. Диалог. Панелей для открытия и записи в файл.
- 30.Панель инструментов и строка состояния. Создание панели инструментов. Добавление и удаление пиктограмм.
- 31.Разработка ф-ций обработки сообщений, связ-х с пиктограммой на панели инструм-в. Класс панели инстр-в.
- 32. Доступ к базам данных в vs. Классы odbc.
- 34. Регистрация бд. Создание заготовки приложения.
- 35.Создание экранной формы для отображ-я содерж-го бд.
- 36.Добавление и удаление записей.
- 37. Сортировка и фильтрация записей.
- 3)Атрибуты данных
- 4) Операции
- 43.Класс cRecordset. Компоненты данных и осн.Методы (открытие набора, получ-е атрибутов результ. Набора IsOpen, IsBof, IsEof, IsDeleted, обновл-е результ. Набора)
- 1)Компоненты данных
- 2)Конструирование
- 44.Класс cRecordset. Компоненты данных и осн.Методы (операции перемещения пo результир-му набору, операции IsFieldDirty, IsFieldNull, Requary, SetFieldDirty, SetFieldNull).
- 1)Компоненты данных
- 45. Класс cRecordset. Переопределяемые методы (DoFieldExchange, GetDefoltSql, GetDefoltConnect).
- 46.Класс cRecordView.
- 1)Создание объекта
- 2)Атрибуты данных
- 47. Основные технологии com. Автоматизация. Перманентность. Моникеры.
- 48. Единообразная передача данных и объекты с подключением.
- 49. Технология ado. Объектная модель, наборы ado.
- 50. Применение ado Data Control и DataGrid Control.
- 2.2. Методические указания
- 51. Удаление, добавление и редактирование записей в технологии ado
- 52.Настройка Эл-тов упр-ния ado Data Control и DataGrid Control из кода приложения
- 53. Возможности AppWizard по созданию приложений, поддерживающих технологию ActiveX.
- 54.Библиотеки динамической компоновки dll
- 55.Создание и использование 32-битовых динамически связываемых библиотек
- 56. Создание рабочего потока. Управление приоритетами потоков
- 57. Синхронизация потоков. Объекты синхронизации и классы mfc.
- Объекты синхронизации и классы mfc.
- 58.Отладка программ в vs. Точка останова. Установка точек останова. Команды и окна отладки.
- Терминология отладки
- Команды и окна отладки
- Команды меню
- Установка точек останова
- Другие окна для отладки
- Окно Memory
- Применение утилиты mfc Tracer
- 59. Отладка программ в vs. Анализ значений переменных. Окно CallStact.