Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по Леонову, 5семестр.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
503.3 Кб
Скачать

25.Использование контекста отображения в памяти.

Контекст устройства – объект Windows, содержащий информацию о параметрах рисования для некоторого графического устройства. (принтер, монитор)

Класс CDC — базовый класс для всех классов, представляющих в библиотеке MFC контексты устройств. Класс CDC обеспечивает разработчика набором функций-членов для работы с такими устройствами, как экран дисплея или принтер, а также позволяющих работать с окнами Windows в целом или только с их клиентской частью. Еще раз подчеркнем — все операции рисо­вания выполняются только для объектов класса CDC. Из всех классов, пре­доставляющих интерфейс с контекстами устройств, только класс CDC обес­печивает разработчиков всем необходимым для реализации правильного и эффективного графического вывода, остальные классы, в основном отличаю­щиеся конструктором и деструктором, можно считать вспомогательными.

virtual BOOL CDC::CreateCompatibleDC(CDC* pDC) —создает контекст устройства, расположенный в памяти, совместимый (подобный) задан­ному параметром pDC. Такие контексты позволяют выполнять операции рисования без непосредственной визуализации. Если pDC = NULL, функция создает контекст устройст­ва, совместимый с экраном дисплея.

В момент создания контекста GDI автоматически устанавливает для него системный монохромный битовый массив размером 1х1 пиксель. Таким об­разом, операции графического вывода могут производиться только, если будет создан и установлен новый битовый массив для данного контекста устройства

Функция может создать совместимый, контекст устройства только для кон­текстов, поддерживающих растровые операции. Определить, поддерживает устройство растровые операции или нет, можно с помощью функции GetDeviceCaps.

Совместимые контексты используются для улучшения характеристик вывода графических объектов на экран дисплея, т. к. позволяют заранее подгото­вить "картинку" в памяти, а затем ее вывести полностью на экран, для чего можно воспользоваться функцией BitBIt, осуществляющей перенос битовых массивов между контекстами.

26.Режимы отображения.

До сих пор, говоря о задании координат, мы подразумевали, что речь идет о смещении относительно левого верхнего угла экрана (screen coordinates) или левого верхнего угла клиентской области окна (client coordinates). В прин­ципе для всего, что касается окон в целом и оконных сообщений, например WM_MOVE, WM_MOUSEMOVE, это правильно.

Настройка режимов отображения

Функции этой группы устанавливают и настраивают систему координат, которая используется всеми функциями вывода — координаты вывода зада­ются именно в логических единицах. Кроме единиц по осям Х и Y, функ­ции этой группы задают направление осей и начало координат. Практиче­ски все функции группы реализованы парами. Функции с префиксом Get позволяют получить текущее значение параметра, а с префиксом Set уста­навливают новое значение и возвращают предыдущее. По умолчанию нача­ло координат находится в левом верхнем углу области вывода, (прежде всего окна). При этом ось Х направлена слева направо, а ось Y — сверху вниз. Единица измерения — один пиксель (режим ММ_ТЕХТ). Кстати сказать, именно поэтому на различных устройствах, вследствие различий в размерах пикселя, фактический (визуальный) размер по оси Х может не соответство­вать размеру по оси Y.

Для настройки системы координат в Windows используются два понятия — физическая область вывода (viewport), координаты и размеры которой задаются в физических единицах — пикселях, и логическая область вывода (window), координаты и размеры которой задаются в логических единицах, определяемых режимом рисования.

Теперь давайте ознакомимся с режимами отображения, которые поддержи­вает Windows. Всего их восемь, и основная функция, которая позволяет вы­брать режим, а значит, и систему координат, — SetMapMode:

virtual int CDC::SetMapMode(int nMapMode);

ММ_ТЕХТ(Одна логическая единица равна одному пикселю, ось Х направ­лена вправо, ось Y направлена вниз; режим задан по умолчанию)

MM_HIENGLISH(Одна логическая единица равна 0,001 дюйма, ось Х направлена вправо, ось Y направлена вверх)

MM_HIMETRIC(Одна логическая единица равна 0,01 миллиметра ось Х направ­лена вправо, ось Y направлена вверх)

MM_LOENGLISH(Одна логическая единица равна 0,01 дюйма, ось Х направлена вправо, ось Y направлена вверх)

MM-LOMETRIC(Одна логическая единица равна 0,1 миллиметра, ось Х направле­на вправо, ось Y направлена вверх)

MM_TWIPS(Одна логическая единица — твипс (twips) (1/20 пункта или 1/1440 дюйма), ось Х направлена вправо, ось Y направлена вверх)

MM_ANISOTROPIC(Режим позволяет настраивать с помощью функций SetWindowExt и SetViewportExt размерность (отдельно для каждой) осей, их на­правления и начало отсчета)

MM_ISOTROPIC(Режим позволяет настраивать с помощью функций SetWindowExt и SetViewportExt размерность осей, их направления и начало от­счета, однако единица оси Х равна единице оси Y, таким обра­зом, при необходимости GDI настраивает размерность по осям, обеспечивая соотношение 1:1)