Смекни!
smekni.com

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

- класс документа;

- класс представления (view);

- класс главного окна;

- класс приложения;

Исходные задачи программы распределяются по этим четырём главным классам, и мастер создаёт четыре отдельных исходных файла для каждого из них. По умолчанию он порождает имена классов и исходных файлов по имени проекта.

Класс документа в Ellipse называется CЕllipseDoc. Он порождается из класса CDocument библиотеки MFC. Заголовочный файл CEllipseDoc имеет имя CEllipseDoc.h, а имя файла реализации - CEllipseDoc.cpp. Класс документа отвечает за хранение данных программы и за чтение и запись данных на диск.

Класс представления в Ellipse называется CЕllipseView и порождается от MFC-класса Cview. Заголовочный файл CEllipseView называется CEllipseView.h, а имя файла реализации - CЕllipse.cpp. Класс представления отвечает за отображение данных программы (на экране, на принтере, или другом устройстве) и за обработку информации, вводимой пользователем.

Этот класс управляет окном представления (view window), которое используется для отображения данных программы на экране. Класс представления в Ellipse просто отображает строку сообщения внутри окна представления.

Класс главного окна в 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 .