Пример использования графических функций класса 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.

__________________________________________________________________


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: