Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Курсовые работы / КУРСОВАЯ РАБОТА (Методичка).doc
Скачиваний:
86
Добавлен:
02.05.2014
Размер:
260.61 Кб
Скачать

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. Указатель записи-чтения устанавливается в нуль. После закрытия файл имеет новый размер, соответствующий текущему положению указателя записи-чтения

а+

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

int fprintf (FILE *stream, const char *format...);

Функция формирует по заданным аргументам символьную стро­ку, которая записывается в поток stream. Форматирование сим­вольной строки происходит таким же образом, как и в функции printf().

Параметр Описание

stream Указатель на структуру FILE потока данных format Символьная строка формата (см. printf()) ... Переменное число аргументов

• Возвращаемое значение: число записанных в поток символов. В случае ошибки возвращается отрицательное значение (чаще всего EOF (WEOF)).

__________________________________________________________________

int fscanf (FILE *stream, const char *format, ...);

Функция считывает данные из потока данных stream. Она исполь­зует аргумент format для преобразования считыва­емых символов по заданному формату. Следующие аргументы яв­ляются указателями на переменные, которым присваиваются вводимые значения.

Возвращаемое значение: число успешно преобразованных и присвоенных полей либо EOF в случае попытки считывания конца файла.

__________________________________________________________________

int fputc(int character, FILE *stream);

Функция выводит отдельный символ из потока ввода-вывода.

Возвращаемое значение: записанный в поток символ или EOF в случае ошибки.

__________________________________________________________________

int fputs(const char*string, FILE *stream);

Функция записывает символьную строку в поток данных. Перенос завершается при достижении символа конца строки '\0'. Сам нуль-терминатор в файл не передается и не заменяется симво­лом '\n'.

Возвращаемое значение: код последнего записанного в файл символа. В случае ошибки возвращается EOF.

__________________________________________________________________

int fgetc(FILE*stream);

Функция считывает символ из потока stream. После считывания указатель записи-чтения файла устанавливается в новую пози­цию.

Возвращаемое значение: считанный символ в виде целого беззнакового значения типа int; EOF означает ошибку или конец файла.

__________________________________________________________________

char*fgets(char *string, int n, FILE*stream);

Функция считывает строку из потока stream до тех пор, пока не будут считаны n символов, либо символ конца строки '\n', либо символ конца файла. Символ '\n' не передается в считанную строку. Функция автоматически дополняет полученную строку нуль-терминатором '\0'.

Возвращаемое значение: указатель на string, а в случае ошибки или при получении символа конца файла — NULL-указатель.

__________________________________________________________________

size_t fread(void*buffer, size_t size, size_t nelem, FILE* stream);

Функция считывает nelem элементов размером size байт каждый в область памяти, на которую указывает buffer, из откры­того потока stream.

Возвращаемое значение: количество безошибочно считан­ных элементов данных.

__________________________________________________________________

size_t fwrite(const void *buffer, size_t size, size_t nelem, FILE *stream);

Функция записывает в поток stream nelem элементов дан­ных размером size байтов каждый из области памяти, на которую указывает buffer. После записи указатель записи-чтения потока устанавливается на новое место. Если поток открыт в текстовом режиме, то каждый символ '\n' преобразуется в пару символов: перевода строки и возврата каретки.

Возвращаемое значение: число фактически записанных элементов данных.

__________________________________________________________________

int fseek(FILE *stream, long offset, int from_where);

Функция передвигает указатель записи-чтения файла на заданное аргумен­том offset количество байтов. Аргумент from_where задает точку отсчета для сдвига.

• Для файлов, открытых в двоичном режиме, количество байтов смещения указателя соответствует числу символов, на которые должен передвинуться указатель записи-чтения файла (может быть также и отрицательным).

• Для файлов, открытых в текстовом режиме, количество байтов смещения должно вычисляться с помощью функции ftell(), причем аргумент from_where должен быть равен SEEK_SET. Для аргумента from_where могут быть заданы три различные константы.

SEEK_CUR сдвиг выполняется от текущей позиции указателя чтения-записи файла

SEEK_END сдвиг выполняется от конца файла SEEK_SET сдвиг выполняется от начала файла

Возвращаемое значение: нуль в случае успеха, в противном случае — любое ненулевое значение.

__________________________________________________________________

long ftell(FILE *stream);

Функция возвращает текущее значение указателя записи-чтения файла, связанного с потоком stream.

Возвращаемое значение: текущая позиция указателя запи­си-чтения файла.

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

• Если файл открыт в MS DOS текстовом режиме, то каждый символ '\n' преобразуется в пару символов: перевода стро­ки и возврата каретки (CR/LF). В этом случае значение, воз­вращаемое ftell(), не соответствует физическому байтово­му смещению. В случае ошибки возвращаемым значением является 1L.

__________________________________________________________________

Пример использования приведенных выше функций работы с файлами.

#include <iostream.h>

#include <stdio.h>

void main( void )

{

FILE *file;

char* file_name = "file.txt";

char load_string[50] = "none";

file = fopen( file_name, "w" );

//открываем файл с именем file.txt на запись

fputs( "string", file ); // записываем в него слово string

fclose( file ); //закрываем файл

file = fopen( file_name, "r" );

// открываем этот же файл на чтение

if( file != 0 )

//если файл был действительно открыт, т.е. указатель file содержит адрес

//открываемого файла и, следовательно, не равен 0, то

{

fgets( load_string, 50 , file );

//считываем из файла строку длиной 50 в переменную load_string символов

// из открытого файла (указатель на него file)

cout << "load_string = " << load_string << endl;

// выводим считанную строку на экран

}

else

cout << "File not found !!!" << endl;

// иначе (если файл не был открыт) – сообщаем об ошибке

fclose(file); // закрываем файл

}

Соседние файлы в папке Курсовые работы