Визуализация контактных преобразований в среде Visual C++ 6
Рефераты >> Программирование и компьютеры >> Визуализация контактных преобразований в среде Visual C++ 6

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

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)Создание инструментов рисования

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


Страница: