visualc++ (Визуализация контактных преобразований в среде Visual C++ 6), страница 2

2016-07-31СтудИзба

Описание файла

Документ из архива "Визуализация контактных преобразований в среде Visual C++ 6", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "visualc++"

Текст 2 страницы из документа "visualc++"

Использование функций рисования

  1. Создание объекта контекста устройства

2) Выбор инструментов рисования

3) Выбор стандартных инструментов рисования

4) Создание инструментов рисования

Существуют два различных подхода к созданию и манипулированию графическими изображениями. Можно также вызвать функ­ции рисования в процессе выполнения программы. Эти функции предназначены для создания рисунков, состоящих из отдельных геометрических фигур, таких, как прямые линии, дуги и прямоугольники. Возможно создание и отобра­жение растровых изображений (называемых точечными рисунками), сохраняющих текущие коды пикселей, используемых для воспроизведения образов на устройстве. Растровые изображения удобны для создания более сложных рисунков, которые нелегко разделить на отдельные геометрические фигуры. Средства, описанные в этих главах, взаимосвязаны. Функции рисования используются для изменения узоров пикселей внутри растровых изображений, а битовые операции применяют­ся для манипулирования изображениями, созданными с помощью функций рисо­вания, например, для перемещения или растягивания изображения.

Рассматривается как используются функции рисования, предостав­ляемые системой Windows и библиотекой MFC. Эти функции в сочетании с растровыми средствами составляют полный набор инструментов создания графических образов внутри окна представления или какого-либо другого уст­ройства (например, принтера). Существуют специальные технические приемы печати графических изображений или текстов. В этой главе я рассмотрю основные действия, выполняемые при создании графических

изображений:

1. Создание объекта контекста устройства.

2. Выбор средств рисования внутри объекта.

3. Установка атрибутов рисования для объекта.

4. Вызов функций-членов объекта для рисования графики.

1).Создание объекта контекста устройства

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

Для отображения графического объекта с помощью функции OnDraw класса представления используется объект контекста устройства, адрес которого передает­ся в функцию.

void CMyView::OnDraw (CDC* pDC )

{

// отобразите графику, используя 'pDC->'

}

Функция OnDraw вызывается при рисовании или перерисовке окна представ­ления. Если класс представления поддерживает прокрутку (т. е. порожден от класса CScrollView), то переданный в него объект контекста устройства настраивается на текущую позицию прокрутки документа.

Если программа отображает графику не в окне представления, а в каком-то другом окне (например, в диалоговом), то класс окна для рисования или перери­совки предоставляет обработчик сообщений wm_paint, называемый OnPaint, который создает объект контекста устройства, порождаемый от MFC-класса CPaintDC.

void CMyDialog::OnPaint()

{

CPaintDC PaintDC (this) ;

// отобразите графику, используя 'PaintDC". . .

)

Примечание

Когда нужно нарисовать или перерисовать окно представления, ему передают сообщение wm_paint. Класс cview предоставляет функцию OnPaint, которая создает и подготавли­вает объект контекста устройства, а затем передает его в функцию OnDraw. Класс окна, ко­торый не порождается от cview, должен предоставлять собственную функцию OnPaint, выполняющую рисование содержимого окна.

Чтобы отобразить графику в окне представления или другом окне из функции, которая не обрабатывает сообщения OnDraw или OnPaint, нужно создать объект контекста устройства, являющийся членом MFC-класса CClientDC. Если окно представления поддерживает прокрутку, то перед использованием объекта необхо­димо вызвать функцию CScrollView: :OnPrepareDC для настройки объекта на текущую позицию документа.

void CMyView::OtherFunction ()

{

CClientDC ClientDC (this)

// Если графика отображается в окне представления,

// поддерживающем прокрутку:

OnPrepareDC (sdientDC) ;

// для отображения графики используется 'ClientDC' ...

}

Чтобы отобразить графику вне рабочей области окна, создаём объект класса cwindowDC.

Все функции рисования являются членами класса CDC. Так как cdc — базовый класс по отношению к остальным классам объекта контекста устройства, то эти функции вызываются при использовании объекта контекста устройства произвольного типа.

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

2)Выбор инструментов рисования.

Имеются два инструмента, выбор которых отражается на работе функций класса CDC — перо и кисть. Перо влияет на способ рисования линии. Оно действует как на прямые и кривые линии (например, нарисованные с использованием функции LineTo или Arc), так и на границы замкнутых фигур (например, прямоугольников и эллипсов). Кисть действует на способ рисования внутренней области замкнутых фигур. Очевидно, что замкнутая фигура состоит из двух отдельных элементов: границы и внутренней области.

Инструменты рисования, определенные в этом разделе, т.е. перья и кисти, принадлежат к категории объектов, называемых графическими или объектами GDI (термин объект отно­сится к структуре данных Windows, а не к объекту C++; GDI означает графический интер­фейс устройства –

graphics device interface). Существуют другие графические объекты:

шрифты , растровые изображения , области, контуры и палитры. Хотя области, контуры и палитры также относятся к рисованию. Полное описание областей, контуров и палитр приведено в следующих разделах справочной системы: Platform SDK, Graphics and Multimedia Services, GDI . Информация об использовании областей и палитр в MFC - в следующих разделах справочной системы: Visual C++ Documentation, Reference, Microsoft Foundation Class Library and Templates, Microsoft Foundation Class Library, Class Library Reference, CRgn и CPalette. Информация об использовании контуров в MFC - в разделах Visual C++ Documentation, Reference, Microsoft Foundation Class Library and Templates, Microsoft Foundation Class Library, Class Library Reference, CDC, CDC Class Members, а также в разделе Path Functions.

При первичном создании объект контекста устройства содержит заданные по умолчанию перо и кисть. Перо рисует сплошную черную линию шириной в 1 пиксель независимо от текущего режима отображения (который будет рассмотрен далее). Кисть заливает внутреннюю область фигуры с замкнутым контуром непрозрачным белым цветом. Для каждого из этих инструментов приведены функции рисования, на которые влияет выбор инструмента, и выбранный по умол­чанию идентификатор инструмента. Если нужно выбрать инструмент, идентифи­катор передается в функцию SelectStockObject .

Чтобы изменить текущее перо или кисть, выбираем стандартное перо или кисть или создаём пользовательские, а затем выбираем их в объекте контекста устройства. Выбранные перо или кисть используются до следующего явного выбора других инструментов рисования.

3)Выбор стандартных инструментов рисования

Выбирается перо или кисть вызовом функции SelectStockObject класса cdc:

CGdiObject* SelectStockObject (int nIndex);

Параметр nIndex является кодом отдельного стандартного объекта, который передается в объект контекста устройства. Можно вызвать функцию SelectStockObject для выбора стандартного шрифта.

Например, следующие строки выбирают белое перо и серую кисть.

void CMyView:;OnDraw(CDC* pDC)

(

pDC->SelectStockObject (WHITE_PEN) ;

pDC->SelectStockObject (GRAY_BRUSH) ;

// Вызов других графических функций и рисование графики ... // (линии и границы будут белыми, внутренние области // фигур с замкнутыми контурами - серыми)

}

При выборе пера null_pen линии не рисуются. Значит, выбор не удачен. Аналогично при выборе NULL_BRUSH внутренняя часть фигуры не закрашивается. Этот инструмент удобен при рисовании фигур, состоящих только из границы (прямоугольник), если необходимо оставить неизменным существующее на экране графическое изображение внутри границы.

Примечание

Стандартное перо рисует сплошные линии шириной в один пиксель независимо от заданного режима отображения. Стандартная кисть закрашивает сплошным цветом, а не узорами.

4)Создание инструментов рисования

Можно создать перо или кисть, выполнив следующие действия.

1. Создаём экземпляр класса СРеn для пера или CBrush для кисти.

2. Вызываем соответствующую функцию класса СРеn или CBrush для инициа­лизации пера или кисти.

3. Выбираем перо или кисть в объекте контекста устройства, сохраняя указатель на предыдущее перо или кисть.

4. Вызываем функции рисования для выполнения графического вывода.

5. Снова выбираем старое перо или кисть в объекте контекста устройства.

Для создания временного пера или кисти можно объявить экземпляр класса СРеn или CBrush как локальный объект внутри функции, генерирующей графический вывод. Этот метод продемонстрирован в примере фрагмента программы, приве­денном в конце этого раздела. При многократном использовании в программе выбранного пера или кисти объект удобнее объявить как переменную класса пред­ставления или любого класса, управляющего окном вывода.

Для инициализации пера вызываем функцию CreatePen класса СРеn.

BOOL CreatePen (int nPenStyle, int nWidth, COLORREF crColor) ;

Параметр nPenStyle описывает стиль линии, нарисованной пером. Присваивание стиля ps_null создает перо, совпадающее со стандартным пером null_pen. Стиль ps_insideframe выбирает перо для рисования границы вокруг фигуры с замкнутым контуром, расположенной внутри ограничивающего прямоугольника. Ограничивающие прямоугольники и эффекты стиля ps_insideframe описаны далее. Стили ps_dash, ps_dot, ps_dashdot и PS dashdotdot используются, если ширина пера равна 1 пикселю. Если ширина пера превышает этот размер, то перечисленные стили генерируют сплошные линии.

Параметр nWidth описывает ширину линии в логических единицах, используемых в текущем режиме отображения. Если ширина пера — 0, то

ширина линии — 1 пик­сель, независимо от текущего режима отображения. Такая ширина генерируется и стандартным пером, и заданным по умолчанию.

Параметр crColor задает цветовой код линии. Легче всего описать цвет, используя макрос Win32 rgb.

ColorRef RGB (bRed, bGreen, bBlue)

Параметры bRed, bGreen и bBlue показывают относительную интенсивность красного, зеленого и синего цветов. Каждому параметру можно присвоить значение в диапазоне от 0 до 255. В табл. 19.3 приведены значения, которые передаются в макрос RGB для описания 16 чистых цветов, доступных в стандартном графическом режиме VGA.

Обратим внимание: перу присваивается только чистый цвет. Чистый цвет - это цвет, генерируемый аппаратными средствами для видеоотображения, который не требуется имитировать смешиванием различных цветов (известным как имитация полутонов (dithering)). Если присвоить перу цветовой код, который не относится НИ к одному из чистых цветов, то линия будет нарисована с использованием ближайшего чистого цвета. Исключение из этого правила: если перо имеет стиль ps_insideframe и ширину более 1 пикселя, то Windows использует полутона (если присвоенный цвет не является чистым).

Примечание

Класс СPеn предоставляет более совершенную функцию инициализации пера, называемую ExtCreatePen. В среде Windows NT эта функция задает способ изменения и объединения широких перьев, что позволяет создавать перья с пользовательским стилем. Однако Windows 95 не поддерживает большинство из этих средств. Заметим также, что вместо вызова функции CPen: :CreatePen, объект пера можно инициализировать при его создании, передавая конструктору СPеn соответствующие параметры. Информация о

конструкторах СРеn и ExtCreatePen - в следующих разделах справочной системы: Visual C++ Documentation, Reference, Microsoft Foundation Class Library and Templates, Microsoft Foundation Class Library, Class Library Reference, СРеп.

Кисть можно инициализировать так, чтобы она окрашивала однородным цветом внутреннюю область фигур, вызывая функцию CreateSolidBrush класса CBrush с параметром crColor, описывающим цвет заливки. Можно задать любой цвет. Если присвоенный цвет не является чистым, то Windows генерирует псевдо­полутоновый цвет (полученный имитацией полутонов).

BOOL CreateSolidBrush (COLORREF crColor);

Кроме того, для заливки внутренней области фигур можно инициализировать кисть, вызвав функцию CreateHatchBrush класса Cbrush.

BOOL CreateHatchBrush (int nindex, COLORREF crColor);

Параметр nIndex задает узор. Параметр crColor описывает цвет линий штриховки.

Функция CreatePatternBrush класса CBrush вызывает кисть для заполнения фигуры заданным узором.

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5173
Авторов
на СтудИзбе
436
Средний доход
с одного платного файла
Обучение Подробнее