Лабораторная работа №9 по VisualC++ 2005
"Работа с графикой посредством возможностей MFC"
1 Постановка задачи
Создать Windows-программу для рисования типовых графических элементов: линий, прямоугольников, эллипсов, окружностей, дуг с выбором перьев и кистей. Предусмотреть закрашивание или штриховку некоторых фигур и других замкнутых областей.
2 Общиеуказания
Вывод на клиентскую область, дисплея является графическим, независимо от того, выводятся линии, окружности или же текст.
Начало координат – в левом верхнем углу. Ось OY направлена вниз. Windows требует, чтобы вы определяли весь вывод, используя интерфейс графических устройств (GraphicalDeviceInterface- GDI). Именно GDIпозволяет программировать графический вывод независимо от оборудования, на котором он отображается.
2.1 Контекст устройства
Когда нужно что-то нарисовать на устройстве графического вывода, требуется использовать контекст устройства. Это структура данных, определяемая Windows. Она содержит информацию, позволяющую Windows транслировать запросы на вывод, которые поступают в форме независимых от устройства вызовов функций GDI, в действия физического вывода на конкретное устройство. Посредством функций GDI можно изменять параметры, влияющие на вывод в контекст устройства. Эти параметры называются атрибутами. К ним относятся цвет рисования, цвет фона, толщина линии, шрифт и др.
Контекст устройства также предоставляет выбор координатных систем, называемых режимами отображения (mapping modes). Каждый режим отображения в контексте устройства имеет идентификатор (ID) подобно тому, как это делается с сообщениями в Windows. Каждый имеет префикс MM_ , что означает mapping mode. В частности, в режиме MM_TEXT логической единицей для задания координат является один пиксель устройства с положительным xслева направо и положительным yот вершины до дна клиентской области. Количество пикселей зависит от разрешения дисплея и может быть, например, 1024х768 или 1280х1024.
2.2 Класс CDC
Все объекты этого класса и его производных классов содержат контекст устройства и функции- члены, необходимые для того, чтобы посылать графику и текст на дисплей и принтер. Таким образом, контекст является объектом класса CDC, включающий методы, необходимые для построения изображения в окне.
2.3 Функция - член OnDraw( )
Мастер создания приложений MFC Application Wizard генерирует класс для отображения информации из документа в клиентскую область окна документа. Если Вы дали имя приложению, например, My, то этот класс автоматически получит имя CMyView (вид). Напомним, что мастер также создаёт классы CMyDoc (документ ), CMainFrame (обрамление главного окна ), CMyApp (приложение).
Определение класса CMyView включает переопределение некоторых виртуальных функций. Одна из них- OnDraw( ). Она вызывается всякий раз, когда требуется перерисовать клиентскую область документа. Эта функция вызывается каркасом приложения, когда программа получает сообщение WM_PAINT. Реализация метода OnDraw( ), созданного мастером
MFC Application Wizard, приводится ниже.
voidCMyView::OnDraw(CDC* /*pDC*/)// Не забыть убрать комментарий //либо подставить собственное имя
{
CMyDoc*pDoc=GetDocument();
Функция GetDocument() извлекает указатель на документ m_pDocument, унаследованной переменной- члена объекта представления. Функция выполняет важную задачу приведения указателя, хранящегося в этой переменной, к типу, соответствующему классу документа приложения CMyDoc. Это нужно, чтобы компилятор получил доступ к членам класса CMyDoc. Иначе он будет иметь доступ только к членам базового класса.
Следующая строка
ASSERT_VALID(pDoc);// Здесь проверяется, что pDoc содержит //корректный адрес
if(!pDoc)
return;
// TODO : сюда добавить код рисования для собственных данных
}
Оператор if(!pDoc) проверяет, что pDoc не равен нулю.
Имя параметра pDC для функции OnDraw() означает указатель на контекст устройства (pointer to Device Context).
2.4 Объекты GDI
В процессе рисования используются специальные объекты GDI, перечисленные в таблице.
Идентификатор |
Класс |
Название |
HPEN |
CPen |
Перо |
HBRUSH |
CBrush |
Кисть |
HFONT |
CFont |
Шрифт |
HBITMAP |
CBitmap |
Растровое изображение |
HPALETTE |
CPalette |
Палитра |
HRGN |
CRegion |
Область |
2.4.1 Объект «Перо»
Предназначен для рисования.
Как и в случае с любыми другими объектами в Visual C++ , перед использованием следует выполнить создание объекта «Перо», которое должно включать в себя и связывание с соответствующим объектом системы Windows. Эта операция осуществляется с помощью метода, имя которого начинается префиксом Create. Это может быть выполнено как после создания объекта, так и в конструкторе. При создании пера можно задать его ширину, цвет и тип линии.
Синтаксис:
Имя_объекта_перо . CreatePen(стиль_пера, толщина, цвет);
Эти же данные можно задать с помощью конструктора:
CPenимя_объекта_перо (стиль_пера, толщина, цвет) ;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.