Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб.DOC
Скачиваний:
7
Добавлен:
16.05.2015
Размер:
662.02 Кб
Скачать

4.5.2 Використання пера та пензля в mfc-програмах

Перед початком виведення на пристрої графічних зображень необхідно також попередньо настроїти відповідні графічні об’єкти: перо, пензель, шрифти і т.д. В бібліотеці MFCкожному такому об’єкту відповідає свій клас (табл.4.3).

Послідовність створення графічних об’єктів на основі класів бібліотеки MFC дуже нагадує відповідну процедуру при роботі з функціями API.

  1. Створення графічного об’єкта. Це можна зробити двома способами.

Перший спосіб. Спочатку викликається конструктор для створення об’єкта класу, а потім викликається відповідна MFC-функція ініціалізації.

Наприклад:

CPen Pen1; // створення пера;

Pen1.CreatePen(PS_SOLID,2,RGB(255, 0, 0)); // ініціалізація червоно-го пера для рисування суцільних ліній товщиною в два пікселя;

Таблиця 4.2 - Класи контекстів пристроїв

Клас

Призначення

CDC

Базовий клас усіх класів контекстів пристроїв

CClientDC

Клас контексту пристрою для забезпечення доступу до клієнтської (робочої) області вікна. При створенні об’єкта цього класу в конструкторі викликається API -функція GetDC(), а при його знищенні в деструкторі – API-функція RealeaseDC().

CWindowDC

Клас контексту пристрою для забезпечення доступу до всього вікна. При створенні об’єкта цього класу в конструкторі викликається API-функція GetWindowDC(), а при його знищенні в деструкторі – API-функція ReleaseDC().

CPaintDC

Клас контексту пристрою для використання тільки в обробнику повідомлення WM_PAINTз метою збереження і відновлення вмісту вікна. При створенні об’єкта цього класу в конструкторі викликається API-функція BeginPaint(), а при його знищенні в деструкторі – API-функціяEndPaint().

CMetaFileDC

Клас контексту пристрою для забезпечення доступу до метафайлів. Метафайли (тип файлів .WMFабо .EMF), на відміну від інших графічних файлів, містять команди рисування, які виконуються при виведенні метафайла.

Другий спосіб. Створення графічного об’єкта і його одночасна ініціалізація з допомогою одного конструктора.

Наприклад:

CPen Pen1(PS_SOLID , 2, RGB(255, 0, 0)); .

Таблиця 4.3 - Класи графічних об’єктів

Клас

Тип дескриптора

Призначення

CPen

HPEN

Призначений для створення об’єктів “перо”

CBrush

HBRUSH

Призначений для створення об’єктів “пензель”

CFont

HFONT

Призначений для створення об’єктів “шрифт”

CBitmap

HBITMAP

Призначений для створення об’єктів “бітовий масив”

CPalette

HPALETTE

Призначений для створення об’єктів “палітра”, тобто набір кольорів, доступних системі

CRgn

HRGN

Призначений для створення об’єктів – “областей” різних форм

2. Завантаження графічного об’єкта в контекст пристрою. Виконується з допомогою методу SelectObject(). Наприклад:

CClient dc(this);

dc.SelectObject(&Pen1); .

3. Після закінчення операції рисування забезпечити знищення графічного об’єкта з контексту пристрою. Ця операція в MFC–програмах відбувається автоматично. Нагадаємо, що при роботі з API-функціями знищення графічного об’єкта проводиться в явному вигляді за допомогою функціїDeleteObject().

      1. Рисування ліній

Методи класів для рисування ліній та геометричних фігур і за назвами і за виконуваними функціями дуже схожі на відповідні функції API. Тому лише коротко зупинимось на найважливіших методах векторної графіки.

Рисувати будемо в контексті робочої області вікна.

Щоб нарисувати одиночну пряму лінію, спочатку необхідно вказати її початкову точку з координатами x, y, за допомогою методу MoveTo:

BOOL MoveTo( int x, int y); .

Потім необхідно викликати метод LineTo:

BOOL LineTo(int x1, int y1); .

Цей метод рисує пряму від поточної позиції до точки з координатами x1 іy1. Подальші виклики цього методу дозволять нарисувати задану послідовність ліній

Таку ж послідовність ліній, які з’єднуються між собою, можна нарисувати з допомогою методу PolyLine:

BOOL PolyLine(CONST POINT *lppt, int cPoints);

де lpptпредставляють собою масив структур типуPOINT, який містить координати набору точок, аcPoints – кількість самих точок (яких повинно бути не менше двох). Наприклад, з допомогою наступного фрагмента програми можна нарисувати букву М:

POINT Points[5];

Points[0].x=50; Points[0].y=50;

Points[1].x=50; Points[1].y=150;

Points[2].x=100; Points[2].y=100;

Points[3].x=150; Points[3].y=50;

Points[4].x=150; Points[4].y=150;

dc.PolyLine(Points, 5); .

Нарисувати дугу можна з допомогою методу Arc:

BOOL RoundRect(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); .

Призначення аргументів в останньому методі такі ж, як і в однойменній функції API.

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