Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП. Курсовое проектирование ИСТ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
171 Кб
Скачать
☆

2. Работа с графикой.

CDC – класс, содержащий методы рисования.

Например, создание объекта класса CDC:

СDС MyDC;

вызов методов созданного объекта:

MyDC.MoveTo(0,0);

MyDC.LineTo(10,10);

CClientDC( CWnd* pWnd ); – класс, наследующий методы класса CDC и инициализирующий окно для рисования pWnd, в котором будет выводиться вся графика, например, создание объекта класса CClientDC:

CWnd* pWnd = GetDlgItem(IDC_DIALOG);

CClientDC NewDC( pWnd );

NewDC.MoveTo(0,0);

NewDC.LineTo(10,10);

где метод CWnd* GetDlgItem( int nID );

возвращает указатель на окно элемента диалога с идентификатором:

nID = IDC_DIALOG;

COLORREF – тип возвращаемый макросом RGB(r,g,b), где r – красная, g –зеленая, b – синяя компонента от 0 до 255.

например: COLORREF с = RGB(255,0,0,); ­– светло-красный;

с = RGB(128,128,0,); ­– темно-желтый;

Функции вывода текста.

SetTextColor( RGB(255,0,0,) ); – устанавливает красный цвет текста.

virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount );

или

BOOL TextOut( int x, int y, const CString& str );

Функция выводит в точку (x,y) текст из объекта класса CString или массива символов lpszString в количестве nCount символов.

[ СОЗДАТЬ ПЕРО ]

Объект перо служит для изображения линий и контуров графических элементов.

CPen ( int nPenStyle, int nWidth, COLORREF crColor );

nPenStyle – тип пера:

· PS_SOLID – сплошное

· PS_DASH – пунктирное (при толщине 1)

· PS_DOT – точечное (при толщине 1)

· PS_DASHDOT – тире-точка (при толщине 1)

· PS_DASHDOTDOT – тире-точка-точка (при толщине 1)

· PS_NULL – прозрачное перо

nWidth – ширина пера;

crColor – цвет пера.

Например:

CPen pen(PS_SOLID, 3, RGB(0,255,0) ); – сплошное зеленое перо толщиной 3 пиксела.

[ СОЗДАТЬ КИСТЬ ]

Объект кисть предназначен для закрашивания внутренней области в графических объектах.

CBrush( COLORREF crColor );

или

CBrush( int nIndex, COLORREF crColor );

crColor – цвет пера

nIndex – тип пера

· HS_BDIAGONAL \\\\\\\\\\

· HS_CROSS ++++++++++

· HS_DIAGCROSS XXXXXXXXXX

· HS_FDIAGONAL //////////

· HS_HORIZONTAL ----------

· HS_VERTICAL |||||||||||

например: CBrush brush(HS_CROSS, RGB(255,0,0) ); – красное перо "в клеточку".

Функция выбора созданного пера или кисти текущим.

CPen* SelectObject( CPen* pPen );

CBrush* SelectObject( CBrush* pBrush ); – выбирает ТЕКУЩЕЕ перо pPen или кисть pBrush соответственно.

[ ТОЧКА ]

CPoint – класс, содержащий структуру POINT, содержит переменные:

LONG x,y – координаты задаваемой точки.

LPPOINT – указатель на объект класса CPoint или структуру POINT. Пример инициализации объекта класса CPoint:

CPoint p;

p.x = 10;

p.y = 20;

LPPOINT pp = &p;

Функции с применением класса CPoint:

CPoint GetCurrentPosition(); возвращает точку, на которой установлено текущее перо.

CPoint MoveTo( int x, int y );

или

CPoint MoveTo( POINT point );

Функция перемещает перо в указанную точку и возвращает координаты предыдущей точки пера.

BOOL LineTo( int x, int y );

или

BOOL LineTo( POINT point );

Функция изображает линию текущим пером из текущей точки в указанную.

[ ПРЯМОУГОЛЬНИК ]

CRect – класс, содержащий структуру RECT, содержит переменные:

LONG left – левая координата прямоугольника;

LONG right – правая координата прямоугольника;

LONG top – верхняя координата прямоугольника;

LONG bottom – нижняя координата прямоугольника;

LPCRECT – указатель на объект класса CRect или структуру RECT.

Пример инициализации объекта класса CRect:

CRect r(1,1, 10,10);

или

CRect r();

r.SetRect(1,1, 10,10);

LPCRECT pr = &r;

[ ДУГА ]

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

или

BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd );

Функция изображает текущим пером эллиптическую кривую внутри прямоугольника: lpRect или (x1,y1; x2,y2) от начальной точки ptStart; (x3,y3) до конечной точки ptEnd; (x4,y4).

BOOL AngleArc( int x, int y, int nRadius, float fStartAngle, float fSweepAngle );

Функция изображает текущим пером эллиптическую кривую вокруг центральной точки (x,y) радиусом nRadius от угла fStartAngle до угла fSweepAngle, заданных в градусах относительно ординаты x

int SetArcDirection( int nArcDirection );

int GetArcDirection();

Соответственно задается и возвращается направление обрисовки дуги.

Параметр nArcDirection принимает значения:

· AD_COUNTERCLOCKWISE – против ч.с.

· AD_CLOCKWISE – по ч.с

[ ПОЛИЛИНИЯ ]

BOOL Polyline( LPPOINT lpPoints, int nCount );

Функция последовательно рисует текущим пером отрезки по точкам, заданным в массиве lpPoints, количеством nCount

[ Закрашенный прямоугольник ]

void FillRect( LPCRECT lpRect, CBrush* pBrush );

Функция закрашивает прямоугольник lpRect кистью pBrush.

void FrameRect( LPCRECT lpRect, CBrush* pBrush );

Функция закрашивает единичную рамку вокруг прямоугольника lpRect кистью pBrush.

BOOL Rectangle( int x1, int y1, int x2, int y2 );

или

BOOL Rectangle( LPCRECT lpRect );

Функция закрашивает текущей кистью прямоугольник lpRect или (x1,y1; x2,y2).

BOOL RoundRect( int x1, int y1, int x2, int y2, int x3, int y3 )

Функция закрашивает текущей кистью прямоугольник lpRect или (x1,y1; x2,y2) со скругленными углами, которые задаются эллипсом шириной x3 и высотой y3

void FillSolidRect( LPCRECT lpRect, COLORREF clr );

или

void FillSolidRect( int x, int y, int cx, int cy, COLORREF clr );

Функция закрашивает прямоугольник lpRect; (x,y; cx,cy – ширина, высота) цветом clr.

[ ЭЛЛИПС ]

BOOL Ellipse( int x1, int y1, int x2, int y2 );

или

BOOL Ellipse( LPCRECT lpRect );

Функция изображает текущим пером и закрашивает текущей кистью эллипс внутри прямоугольника: lpRect или (x1,y1; x2,y2).

[ Закрашенный СЕКТОР]

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

или

BOOL Pie( LPCRECT lpRect, POINT ptStart, POINT ptEnd );

Функция рисует текущим пером и закрашивает текущей кистью сектор (против ч.с) внутри прямоугольника: lpRect или (x1,y1; x2,y2) от начальной точки ptStart; (x3,y3) до конечной точки ptEnd; (x4,y4).

[ ЗакрашеннАЯ ЗАМКНУТАЯ ОБЛАСТЬ ]

BOOL Polygon( LPPOINT lpPoints, int nCount );

Функция рисует текущим пером и закрашивает текущей кистью замкнутую область, ограниченную отрезками, которые задаются точками массива lpPoints, количеством nCount.

Пример использования графических функций класса CClientDC.

CClientDC MyDC(GetDlgItem(IDC_STATIC1));

// создали объект класса CClientDC, который инициализирует графическое

//окно в элементе диалога приложения с идентификатором IDC_STATIC1.

CRect Rect; // объявили объект класса CRect

CWnd *pWnd = MyDC.GetWindow();

// инициализировали pWnd как указатель на окно, закрепленное за объектом

//MyDC(с идентификатором IDC_STATIC1)

pWnd->GetClientRect(&Rect);

// передали объекту Rect координаты этого окна, т.е. определили область

//экрана, где будем выводить графику.

MyDC.FillSolidRect( &Rect, RGB(50,100,150) );

// закрасили прямоугольник Rect

int w, h;

w = Rect.Width()/3;

// определили ширину прямоугольника Rect и уменьшили ее в 3 раза

h = Rect.Height()/4;

// определили высоту прямоугольника Rect и уменьшили ее в 4 раза

CRect SmallRect = Rect;

//инициализировали малый прямоугольник, объявили его равным

//прямоугольнику Rect

SmallRect.DeflateRect( w, h );

// уменьшили ширину и высоту малого прямоугольника до значений w и h

//соответственно, сохраняя координаты центральной точки прямоугольника.

CBrush Br (RGB(100,0,150)); // инициализировали кисть

MyDC.SelectObject(&Br); // выбрали ее

MyDC.Ellipse( &SmallRect );

// изобразили закрашенный эллипс выбранной кистью, вписанный в малый

//прямоугольник.

Рис. 1. Полученное изображение

3. Работа с файлами в C / C++.

FILE *fopen(const char * filename, const char *mode);

Функция fopen() открывает файл и инициализирует связанный с ним поток данных. Аргумент mode устанавливает режим открытия файла (табл. 2).

• Спецификация режима может быть дополнена символами t или b, указывающими, в текстовом или двоичном режиме от­крывается файл.

• Возвращаемое значение: Функция возвращает указатель на структуру типа FILE (см. 8). Этот указатель затем передается в качестве аргумента следующим функциям, работающим с потоком. Если файл не может быть открыт, возвращается NULL-указатель.

Таблица 2— Режимы открытия файлов

Ре­жим

Описание

r

Файл открывается только для чтения

w

Файл открывается только для записи с усечением. Если файл не существует, он создается в каталоге, заданном в параметре filename. Указатель записи-чтения устанавливается в нуль. После закрытия файл имеет новый размер, соответствующий текущему положению указателя записи-чтения

а

Файл открывается для пополнения, т.е. после его открытия указатель записи-чтения устанавливается на позицию конца файла

r+

Файл открывается для обновления. Он доступен для чтения и записи, но после закрытия не происходит усечения файла. Сразу после открытия указатель записи-чтения устанавливается в начало файла

W+

Файл открывается для обновления, т.е. доступен для чтения и записи. Если файл не существует, он создается в каталоге, заданном в параметре filename. Указатель записи-чтения устанавливается в нуль. После закрытия файл имеет новый размер, соответствующий текущему положению указателя записи-чтения

а+

Файл открывается для обновления, т.е. доступен для чтения и записи. После его открытия указатель записи-чтения устанавливается в позицию конца файла. После закрытия файла не происходит его усечения