Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual1.doc
Скачиваний:
8
Добавлен:
07.03.2016
Размер:
4.35 Mб
Скачать

5.3. Робота з пензликами та малювання графічних фігур

Роботу з пензликами та малюванням фігур розглянемо на основі попередньої програми У функції OnDraw є режими малювання при kod_graf==1 та kod_graf==2:

void CGrafView::OnDraw(CDC* pDC)

{

CGrafDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

CPen pen;

CPen* pen_st;

.............................................................

CRect rect;

GetClientRect(&rect);

if(kod_graf==1)

{

pen.CreatePen(PS_SOLID,3,RGB(255,0,0));

pen_st = pDC->SelectObject(&pen);

pDC->MoveTo(0,0);

pDC->LineTo(rect.right,rect.bottom);

pen.DeleteObject();

pen.CreatePen(PS_SOLID,3,RGB(0,0,255));

pDC->SelectObject(&pen);

pDC->MoveTo(rect.right,0);

pDC->LineTo(0,rect.bottom);

pen.DeleteObject();

pen.CreatePen(PS_DASH,1,RGB(0,255,255));

pDC->SelectObject(&pen);

pDC->MoveTo(0,rect.bottom/2);

pDC->LineTo(rect.right,rect.bottom/2);

pen.DeleteObject();

pen.CreatePen(PS_DOT,1,RGB(255,0,255));

pDC->SelectObject(&pen);

pDC->MoveTo(rect.right/2,0);

pDC->LineTo(rect.right/2,rect.bottom);

pDC->SelectObject(pen_st);

}

if(kod_graf==2)

{

pen.CreatePen(PS_SOLID,1,RGB(255,0,0));

pen_st = pDC->SelectObject(&pen);

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

br_st = pDC->SelectObject(&br);

rect.InflateRect(-rect.right/8,-rect.bottom/8);

pDC->Rectangle(&rect);

br.DeleteObject();

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

pDC->SelectObject(&br);

rect.InflateRect(-rect.right/8,-rect.bottom/8);

pDC->Rectangle(&rect);

br.DeleteObject();

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

pDC->SelectObject(&br);

rect.InflateRect(-rect.right/8,-rect.bottom/8);

pDC->Ellipse(&rect);

pDC->SelectObject(pen_st);

pDC->SelectObject(br_st);

}

.............................................................

}

У випадку при kod_graf==1 ми малюємо 4 лінії. Функція CreatePen класу CPen створює об'єкт олівця. Конструктор олівця приймає три параметра: стиль лінії (див. табл. 5.1), товщина лінії, колір. У графічних контекстах Windows є обмеження – при товщині лінії більше ніж 1 піксель стиль може бути тільки PS_SOLID (суцільна лінія).

Таблиця 5.1

Стилі ліній для створенння олівця

Стиль лінії

Опис

PS_SOLID

Сплошна

PS_DASH

Штрихова

PS_DOT

Пунктирна

PS_DASHDOT

Штрих-пунктирна, одна точка на одну лінію

PS_DASHDOTDOT

Штрих-пунктирна, дві точки на одну лінію

PS_NULL

Невидима

PS_INSIDEFRAME

Лінія, предназначена для обводки замкнутих фігур

Функція SelectObject класу CDC завантажує олівець до контексту вікна. У змінну pen_st записується старе значення олівця. Функція MoveTo встановлює першу координату для малювання лінії, при цьому нічого не малюється. Виведення ліній здійснює функція LineTo. В ній задається координата до якої повинна бути проведена лінія. Після проведення лінії координати точки для початку виведення встановлені функцією MoveTo змінюються на координати задані у LineTo. Якщо декілька разів викликати функцію LineTo з різними координатами то в результаті буде намальована ломана лінія. Графічні функції для роботи з контекстом містяться в бібліотеці gdi32.lib. Функція DeleteObject класу CPen видаляє об'єкт олівця з пам'яті. Результат роботи приведено на рисунку 5.4.

Рис. 5.4. Малювання ліній з використанням олівця

При kod_graf==2 малюються графічні фігури – прямокутники та еліпс. Функція CreateSolidBrush створює об'єкт пензлика. Функція SelectObject класу CDC завантажує пензлик до контексту вікна. У змінну br_st записується старе значення пензлика. Функція InflateRect класу CRect збільшує або зменшує розміри прямокутника в залежності від заданих параметрів. При заданні від'ємних значень прямокутник зменшується, додатних значень – збільшується. Функція Rectangle класу CDC малює прямокутник використовуючи координати об'єкта типу CRect або можна задати координати окремими параметрами. Заливка прямокутника та його обводення у даній функції не задається тому що вони беруться із заздалегідь підключених до контексту об'єктів пензлика та олівця. Функція Ellipse приймає такі ж самі параметри як і Rectangle але малює овал вписаний у заданні координати. Функція DeleteObject класу CBrush видаляє об'єкт пензлика з пам'яті. Результат роботи приведений на рисунку 5.5.

Рис. 5.5. Малювання геометричних фігур з використанням олівця та пензликів

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]