- •3. Исходные данные к курсовому проекту
- •2. Работа с графикой.
- •Int fprintf (file *stream, const char *format...);
- •Int fscanf (file *stream, const char *format, ...);
- •Int fputc(int character, file *stream);
- •Int fputs(const char*string, file *stream);
- •Int fgetc(file*stream);
- •Int fseek(file *stream, long offset, int from_where);
- •4. Работа с файлами с помощью mfc (классы cFile, cStdioFile, ... ) и стандартный класс mfc cFileDialog.
- •5. Использование таймера.
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. Указатель записи-чтения устанавливается в нуль. После закрытия файл имеет новый размер, соответствующий текущему положению указателя записи-чтения |
а+ |
Файл открывается для обновления, т.е. доступен для чтения и записи. После его открытия указатель записи-чтения устанавливается в позицию конца файла. После закрытия файла не происходит его усечения |
