Рефераты. Визуализация контактных преобразований в среде Visual C++ 6 p> Класс главного окна в Ellipse называется CMainFraim и порождается от
MFC-класса CFrameWnd. Заголовочный файл CMainFrame называется MainFrm.h, а имя файла реализации - MainFrm.cpp. Класс главного окна управляет главным окном программы, которое является обрамляющим окном и содержит рамку окна, строку заголовка, строку меню и системное меню. Обрамляющее окно также содержит кнопки Minimize, Maximize, Close, а иногда и другие элементы пользовательского интерфейса, например, панель инструментов, строку состояния. Окно представления, управляемое классом представления, занимает внутри обрамляющего окна пустую область, которая называется клиентской областью главного окна. Окно представления не имеет видимых элементов, кроме текста и графики, отображающейся явно. Окно представления – дочернее окно главного окна, поэтому оно всегда отображается поверх и внутри границ рабочей области главного окна.

Наконец, класс приложения назван CEllipseApp и порожден из MFC–класса
CWinApp. Файл заголовков класса CEllipseApp назван Ellipse.h, а файл реализации – Ellipse.cpp. Класс приложения управляет программой в целом.
Это значит, что он выполняет общие задачи, не относящиеся к каким-либо другим трём классам (например, инициализацию программы и её заключительную очистку). Каждая MFC–программа должна создать в точности один экземпляр класса, порождённого из класса CWinApp. Четыре главных класса обращаются друг к другу и обмениваются данными, вызывая открытые функции-члены другого класса и посылая сообщения.

Глава 2.

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

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 как локальный объект внутри функции, генерирующей графический вывод. Этот метод продемонстрирован в примере фрагмента программы, приведенном в конце этого раздела. При многократном использовании в программе выбранного пера или кисти объект удобнее объявить как переменную класса представления или любого класса, управляющего окном вывода.

Страницы: 1, 2, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.