Урок 1: рисование





НазваниеУрок 1: рисование
Дата публикации25.08.2014
Размер41.9 Kb.
ТипУрок

Урок 1: рисование


Рисование в MFC производится с помощью так называемого контекста устройства (Device context). В качестве устройства может выступать экран, принтер, векторный файл. WINAPI позволяет рисовать в различные устройства с помощью одного и того же интерфейса, которым является класс CDC. Мы с ним уже встречались в уроке 0:
void CChildView::OnPaint()

{

CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here

// Do not call CWnd::OnPaint() for painting messages

}
Класс CPaintDC – наследник класса CDC. У него очень много методов рисования примитивов. Простейшими примитивами являются линии – они рисуются с помощью методов LineTo и MoveTo. Здесь используется плоттерная идеология: предполагается существование «пера», которое находится в определенной точке и может перемещаться по воздуху (MoveTo) и по «бумаге» (LineTo). Пример рисования линий:


Рисование линии происходит текущим пером (карандашом, CPen), выбранным в контексте.
Если вы хотите поменять, например, цвет, то нужно завести карандаш с таким цветом. Затем добавить его в DC взамен старого, а указатель на старый обязательно сохранить. После использования карандаша нужно старый карандаш вернуть на место. Вот пример изменения цвета.
void CChildView::OnPaint()

{

CPaintDC dc(this); // device context for painting

CPen penGreen; // Construct it, then initialize

// CreatePen возвращает 0, если создать объект не удалось

penGreen.CreatePen( PS_SOLID, 2, RGB(0,255,0) );

// Select it into the device context

// Save the old pen at the same time

CPen* pOldPen = (CPen *) dc.SelectObject( &penGreen );
// Draw with the pen. For example,

dc.MoveTo(10,20);

dc.LineTo(100,200);
// Restore the old pen to the device context

dc.SelectObject( pOldPen );

}
Цвет кодируется тремя числами: R(red)G(green)B(blue), каждое от 0 до 255. Т.о., (0,0,0) – черный, (255,255,255) – белый, (0,255,0) - зеленый. PutPixel(255,0,0); - рисование точки красного цвета. RGB(c1,c2,c3) – это макрос, в результате которого образуется число.
Существует множество функций рисования:

  • Arc – дуга эллипса

  • Rectangle - прямоугольник

  • Ellipse - эллипс

Для получения справки по какой-нибудь из функций наберите, например dc.Arc и нажмите F1. Тогда вы получите справку MSDN по данной функции. Список всех функций рисования примитивов можно получить набрав CDC, и нажав F1. Вы получите список всех методов класса CDC, в том числе, методов рисования.
У таких фигур как эллипс и прямоугольник, внутренность закрашивается с помощью текущей кисти (CBrush).

void CChildView::OnPaint()

{

CPaintDC dc(this);

CBrush brush;

brush.CreateSolidBrush(RGB(0,255,0) ) ;

CBrush* pOldBrush = (CBrush *) dc.SelectObject( &brush );
dc.Rectangle(20, 20, 300, 160);
dc.SelectObject( pOldBrush );
CBrush brush2;

brush2.CreateHatchBrush(2, RGB(255,0,0) ) ;

pOldBrush = (CBrush *) dc.SelectObject( &brush2 );
dc.Rectangle(50, 120, 200, 250);
dc.SelectObject( pOldBrush );
}



Дополнительные сведения

1. Если нужно один и тот же объект (например, карандаш или кисть) создавать несколько раз (меняя цвет, например), то последовательность действий такая:
CPen pen;

CPen * pOldPen;
for(int i=0; i<3; ++i)

{

pen.CreatePen( PS_SOLID, i, RGB(i*100,0,0) );

pOldPen = dc.SelectObject( &pen );
// Draw with the pen. For example,

dc.MoveTo(10*(i+1),20);

dc.LineTo(100*(i+1),200);

// Restore the old pen to the device context

dc.SelectObject( pOldPen );

// Delete the graphic object; действует только если перед этим

// выбрать другой графический объект, тем самым освободив предыдущий.

pen.DeleteObject();

}
2. Есть набор стандартных карандашей и кистей. Их можно использовать, не создавая своих объектов. Например, так:

CBrush* pOldBrush = (CBrush*) dc.SelectStockObject(BLACK_BRUSH);
3. Есть возможность создать не саму кисть (или перо), а ее содержание (логическую структуру). Потом на основе этого содержания можно создавать уже настоящие кисти/перья. Логическая структура удобна тем, что с ней можно работать, как с настоящей структурой, менять ее свойства через изменение полей.

LOGBRUSH logBrush;

logBrush.lbStyle = BS_HATCHED;

logBrush.lbColor = RGB(192, 192, 0);

logBrush.lbHatch = HS_CROSS;

// Declare an uninitialized CBrush ...

CBrush brush;

// ... and initialize it with the LOGBRUSH.

brush.CreateBrushIndirect(&logBrush);
4. Чтобы рисовать в относительных координатах, можно узнать размер всего окна (его клиентской (внутренней) части).

CRect rc; //Стандартный класс прямоугольника

GetClientRect(&rc); //Получаем прямоугольник, имеющий размеры области для рисования в координатах устройства

dc.Rectangle(0, 0, rc.Width() / 2, rc.Height() / 2); //Прямоугольник размером //в четверть окна в логических координатах; в данном случае логические и //координаты устройства совпадают, иначе надо пользоваться функциями DPtoLP и LPtoDI
5. Со шрифтами работают так же, как и с перьями и кистями. Ниже приведен пример работы с использованием логической структуры.

CFont font;

LOGFONT lf;

memset(&lf, 0, sizeof(LOGFONT)); // zero out structure

lf.lfHeight = 14; // request a 12-pixel-height font

strcpy(lf.lfFaceName, "Arial"); // request a face name "Arial"

font.CreateFontIndirect(&lf); // create the font

CFont* def_font = dc.SelectObject(&font);

dc.TextOut(5, 5, "Hello"); //по умолчанию указанные координаты – это координаты // верхнего левого угла прямоугольника, в который идет вывод текста. Это можно // // изменить с помощью вызова dc.SetTextAlign(…)

dc.SelectObject(def_font);

font.DeleteObject();// Done with the font. Delete the font object.
lf.lfHeight = 20; // request a 20-pixel-height font

strcpy(lf.lfFaceName, "Courier New"); // request a face name "Arial"

font.CreateFontIndirect(&lf); // create the font

def_font = dc.SelectObject(&font);

dc.TextOut(50, 50, "Hello");

dc.SelectObject(def_font);


Задания (сделать до 17.09, послать на usevich.k.d@gmail.com): (по убыванию сложности)


  1. Воспользоваться MSDN, нарисовать окружность пунктиром.

  2. Воспользоваться MSDN, нарисовать прямоугольник с закругленными углами:




  1. Воспользоваться MSDN, нарисовать прямоугольник, заштрихованный в

клетку


  1. Воспользоваться MSDN, нарисовать закрашенный зеленым пятиугольник.

  2. Воспользоваться MSDN, нарисовать вытянутый эллипс, закрашенный синим цветом.

Добавить документ в свой блог или на сайт

Похожие:

Урок 1: рисование iconКак увлечь ребенка рисованием?
Рисование для детей – это чудо–занятие. Рисование – это развитие мелкой моторики, творчества, фантазии, воображения, выражение своего...
Урок 1: рисование iconПрограмма по формированию навыков безопасного поведения на дорогах...
Задачи: продолжать формировать навыки рисования, используя нетрадиционные техники (рисование ладошками, ногами, тычок жесткой полусухой...
Урок 1: рисование iconТема: Рисование на тему Весенний день 2часа, 1 урок (карандаши)
Воспитывать интерес и любовь к искусству. Ознакомление с художественными произведениями
Урок 1: рисование iconУрок Успеха прошёл по теме «В гости к Учителю»
На Уроке Успеха у Ивашкиной Людмилы Анатольевны побывали учащиеся 1 класса Б. Она провела с учащимися интересный урок по теме: «Музыка...
Урок 1: рисование iconУрок №27 Рисование на тему: «Богатырские кони»
В кабинете №4 имеется компьютер, проектор, принтер, ксерокс, модульная система экспериментов, цифровой микроскоп
Урок 1: рисование iconРисование с натуры натюрморта из геометрических тел (куба, цилиндра, конуса)
Перед уроком обязательно должен быть организован просмотр фильма «Рисование с натуры натюрморта из геометрических тел» с целью наблюдения...
Урок 1: рисование iconПрограмма по формированию навыков безопасного поведения на дорогах...
Вместе с детьми мы рассмотрели несколько видов техник, познакомились с кляксографией, рисованием пальчиками, ладошкой, ватными палочками,...
Урок 1: рисование iconПрограмма по формированию навыков безопасного поведения на дорогах...
Урок изобразительного искусства «Декоративное рисование. Украшение узором игрушки-матрёшки»
Урок 1: рисование iconЛабораторная работа №5 Тема: "Создание графических объектов"
На панели Рисование (рис. ) расположены инструменты для рисования, управления, и форматирования всех видов графических объектов....
Урок 1: рисование iconПрактическое задание 3 в программе Adobe Photoshop cs2 «Пиксель-арт»
Для начала поясню что такое пиксель-арт. Как можно догадаться здесь соединены два слова «пиксель» точка, ячейка изображения, и «арт»...
Урок 1: рисование iconУрок в 5 классе по теме «Красота родной природы»
Проведённый урок в 5 классе по теме «Красота родной природы» рисование с натуры или по памяти деревьев: берёзы, тополя, дуба, сосны,...
Урок 1: рисование iconУрок изобразительного искусства в 4 классе по теме: «Рисование с...
Цели: продолжить формирование графических умений и навыков в изображении овощей
Урок 1: рисование iconУрок изобразительного искусства на тему: «Рисование фруктов»
Учитель: На протяжении уроков этой четверти мы обсуждаем одну очень интересную тему, кто ответит какую?
Урок 1: рисование iconПрограмма по формированию навыков безопасного поведения на дорогах...
Иными словами, рисование тренирует ручку ребенка и развивает его умственные способности. Ну а в финансовом плане это занятие вообще...
Урок 1: рисование iconУрок изобразительного искусства в 4-ом классе Тема: «Рисование фигуры человека с натуры»
Организовать деятельность учащихся по формированию умения изображать фигуру человека с натуры, учитывая пропорции, пластичность и...
Урок 1: рисование iconУрок конкурс 10. Интегрированный урок >11. Межпредметный урок 12....
Изменение временных рамок, оптимальный временной вариант –1,5 астрономических часа. (Нерегламентированный урок)


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск