- •Л. Б. Бузюков, о. Б. Петрова
- •Учебное пособие
- •Предисловие
- •Глава 1. Введение в язык с
- •1.1. История создания и особенности языка с
- •1.3. Элементы языка с
- •1.3.1. Основные символы
- •1.3.2. Ключевые слова
- •1.3.3. Идентификаторы
- •1.3.4. Константы
- •1.3.5. Лексемы
- •1.3.6. Комментарии
- •Глава 2. Типы данных языка c
- •2.1. Числовые типы данных
- •2.2. Объявление переменных
- •2.3. Данные целого типа
- •2.4. Данные вещественного типа
- •Глава 3. Выражения
- •3.1. Операции
- •3.1.1. Арифметические операции
- •3.1.2. Операция присваивания
- •Глава 4. Составление простейших программ
- •4.1. Препроцессор и его функции
- •4.2. Основные директивы препроцессора
- •4.2.1. Директива include
- •4.2.2. Директива define
- •4.2.3. Директива undef
- •4.3. Структура и правила составления программ
- •4.3.1. Структура функции
- •4.3.2. Функция main()
- •4.3.3. Структура простой программы
- •4.3.4. Правила записи объявлений, операторов и комментариев
- •4.3.5. Пример простейшей программы
- •Глава 5. Средства ввода/вывода
- •5.1. Общие замечания
- •5.2. Функция форматированного вывода printf()
- •5.2.1. Основные форматы
- •5.2.2. Модификации форматов
- •5.3. Функция форматированного ввода scanf()
- •Глава 6. Управляющие операторы
- •6.1. Условные операторы
- •6.1.1. Логические выражения
- •6.1.2. Формы оператора if
- •6.1.3. Оператор выбора switch
- •6.2. Операторы цикла
- •6.2.1. Оператор while
- •6.2.2. Оператор for
- •6.2.3. Оператор do-while
- •6.3. Операторы перехода
- •6.3.1. Оператор break
- •6.3.2. Оператор continue
- •6.3.3. Оператор return
- •6.3.4. Применение оператора goto и меток
- •Глава 7. Функции
- •7.1. Основные понятия
- •7.2. Определение функции
- •7.3. Прототип функции
- •7.4. Вызов функции
- •Глава 8. Классы памяти
- •8.1. Логическаяструктура памяти программы
- •8.2. Особенности классов памяти
- •8.3. Объявления переменных
- •8.4. Объявления функций
- •8.5. Время жизни и область видимости программных объектов
- •8.6. Инициализация глобальных и локальных переменных
- •Глава 9. Указатели
- •9.1. Операция получения адреса
- •9.2. Операции над указателями
- •Глава 10. Массивы
- •10.1. Общие сведения о массивах
- •10.2. Одномерные массивы
- •10.3. Двумерные массивы
- •10.4. Массивы и указатели
- •10.5. Массивы и функции
- •Глава 11. Строки
- •11.1. Представление символьной строки при помощи одномерного массива
- •11.2. Указатель на символьную строку
- •11.3. Ввод/вывод символьных строк
- •11.4. Массивы символьных строк
- •11.5. Функции работы состроками
- •Глава 12. Структуры
- •12.1. Определение структуры
- •12.2. Структуры и функции
- •12.3. Указатели на структуру
- •12.4. Массивы структур
- •12.5. Вложенные структуры
- •12.6. Использование синонима типа
- •12.7. Объединения
- •Глава 13. Файлы
- •13.1. Работа с файлами
- •13.2. Функции ввода/вывода
- •Глава 14. Динамическая память
- •14.1. Распределение памяти
- •14.2. Функции управление памятью
- •Глава 15. Проект
- •15.1. Основы создания проекта
- •15.2. Пример создания проекта
- •Глава 17. Основы объектно-ориентированного программирования
- •17.1. Объектно-ориентированный подход
- •17.3. Конструкторы и деструкторы
- •17.4. Инкапсуляция
- •17.5. Полиморфизм
- •17.6. Наследование
- •17.7. Виды взаимодействия классов
- •17.8. Способы графического представления объектно-ориентированной задачи
- •18.2. Библиотека Win32 api
- •18.3. Библиотека owl
- •18.4. Библиотека vcl
- •18.5. Библиотека clx
- •18.6. Библиотека mfc
- •18.7. Библиотека OpenGl
- •19.3. Создание проекта
- •19.4. Редактирование проекта
- •19.5. Компиляция и выполнение программы
- •19.6. Файловая структура проекта
- •19.7. Создание консольного приложения
- •Глава 20. Разработка приложений для операционных систем windows
- •20.1. Взаимодействие программы и Windows
- •20.2. Компоненты библиотеки Win32 api
- •20.3.Функция WinMain()
- •20.4. Оконная процедура
- •20.5. Структура программы для ос Windows
- •20.6. Ресурсы Windows
- •20.7. Взаимодействие прикладной программы и устройств в Windows
- •Глава 21. Создание приложений для ос windows на основе библиотеки mfc
- •21.1. Обзор классов библиотеки mfc
- •21.2. Класс cString
- •21.3. Класс cFile
- •21.4. Класс cPoint
- •21.5. Класс cRect
- •21.7. Приложение, основанное на диалоге
- •21.8. Использование в приложении элементов управления
- •21.9. Мастер классов mfc ClassWizard
- •21.10. Установка начального значения элементам управления
- •21.11. Элементы управления Picture
- •21.12. Элемент управления Group Box
- •21.13. Элемент управления Radio Button
- •21.14. Элемент управления Check Box
- •21.15. Элемент управления List Box
- •21.16. Создание меню
- •21.17. Приложение с двумя диалоговыми панелями
- •21.18. Приложение sdi
- •21.19. Создание панели инструментов
- •21.20. Приложение mdi
- •21.21. Контекстыустройств в mfc
- •21.22. Графические объекты Windows в mfc
- •21.23. Графические операции в mfc
- •П.1. Основы методологии конструирования программ
- •П.1.1. Основные понятия. Программа и алгоритм
- •П.1.2. Этапы разработки программ
- •П.2. Алгоритмы
- •П.2.1. Алгоритм и его свойства
- •П.2.2. Способы описания алгоритмов
- •П.2.3. Средства графического изображения алгоритмов Схемы алгоритмов
- •Псевдокоды
- •Структурограммы
- •П.3. Основные приемы программирования
- •П.3.1. Разновидности структур программирования
- •П.3.2. Программирование линейных и разветвляющихся процессов
- •П.3.3. Программирование циклических процессов
- •Арифметический цикл (цикл с параметром)
- •Итерационный цикл
- •Вложенный цикл
- •Литература
21.3. Класс cFile
Класс CFile предназначен для работы с файлами, используется как базовый класс для других классов MFC, предназначенных для работы с файлами. Обеспечивает небуфферизованный двоичный ввод/вывод в файлы.
В класс включено несколько конструкторов.
Конструктор по умолчанию:
CFile();
Конструктор с параметрами:
CFile(LPCTSTR lpszFileName,UINT nOpenFlags),
где lpszFileName – указатель на строку, содержащую имя файла и путь к нему;
nOpenFlags – целочисленная переменная, определяющая режимы доступа к файлу или его атрибуты и принимающая следующие значения:
CFile::modeCreate – создать новый файл; если файл уже существует, информация из него удаляется;
CFile::modeRead – открыть файл для чтения; для этого файл должен находиться в заданном каталоге; если файл отсутствует, возникает ошибка;
CFile::modeWrite – открыть файл для записи; если указанный файл не найден, он создается в указанном каталоге; указатель файла устанавливается на начало файла; если в файле была какая-либо информация, она стирается.
Пример создания объекта класса CFile:
CFile MyFile("my.txt",CFile::modeRead);
В класс включены методы для работы с файлами:
Virtual UINT Read(void* lpBuf,UINT nCount) – чтение из файла; lpBuf – указатель на буфер, в который помещается прочитанная информация, nCount – размер буфера; возвращает количество информации в байтах, помещенной в буфер;
virtual void Write(const void* lpBuf,UINT nCount) – запись в файл; имеет те же параметры, что и метод Read();
virtual LONG Seek(LONG lOff,UINT nFrom) – позволяет произвольно устанавливать указатель текущей позиции в файле; lOff – смещение в байтах, nFrom – позволяет устанавливать начало отсчета: значение CFile::begin – отсчет от начала файла; CFile::current – отсчет от текущей позиции указателя; CFile::end – отсчет от конца файла;
Open() – открытие файла в соответствии с выбранным режимом;
Close() – закрытие файла.
Пример сохранения строки в текстовом файле:
CFile myfile;
char* pFileName="test.txt";
myfile.Open(pFileName,CFile::modeCreate|CFile::
modeWrite);
myfile.Write("123456789",4);
myfile.Close();
Результатом выполнения этого фрагмента программы будет создание файла test.txt и запись в него строки "1234".
21.4. Класс cPoint
Класс CPoint представляет собой оболочку для структуры POINT (точка) из библиотеки Win32 API, которая объявлена следующим образом:
typedef struct tagPOINT
{
LONG x; //абсцисса точки
LONG y; //ордината точки
} POINT;
Класс CPoint имеет также свойства x и y, представляющие собой координаты точки. Создание объекта точки выполняется с помощью одного из нескольких вариантов конструкторов, включенных в класс.
Один из вариантов создания объекта точки:
CPoint point(200,125);
или
int x=200, y=125;
CPoint point(x, y);
Доступ к свойствам класса открытый, поэтому изменение значений свойств объекта не требует использования функций:
point.x =250;
point.y=point.x–100;
21.5. Класс cRect
Класс CRect включает в себя данные, однозначно определяющие прямоугольную область, и операции над такими областями. Класс представляет собой надстройку структуры RECT, входящей в интерфейс Win32 API:
typedef struct tagRECT
{
LONG left; //Абсцисса левого верхнего угла
//прямоугольника
LONG top; //Ордината левого верхнего угла
//прямоугольника
LONG right; //Абсцисса правого нижнего угла
//прямоугольника
LONG bottom; //Ордината правого нижнего угла
//прямоугольника
} RECT;
Создание объекта прямоугольника возможно разными способами, так как в класс CRect включено несколько конструкторов.
Конструктор по умолчанию:
CRect( );
Конструктор с параметрами:
CRect(int l,int t,int r,int b);
Приведем следующие способы создания объекта прямоугольника:
CRect rect; //Создание объекта без инициализации
//полей
CRect rect (20,30,170,150); //Создание объекта
//и инициализация его полей
При задании значений полей надо помнить, что значения координат левого верхнего угла должны быть меньше значений координат правого нижнего. Такой прямоугольник называется нормализованным. Ненормализованный прямоугольник можно нормализовать с помощью метода класса NormalizeRect().
Класс также содержит методы для работы с данными, например:
Width() – возвращает ширину прямоугольника,
Height() – возвращает высоту прямоугольника,
SetRect() – позволяет изменить размеры уже созданного прямоугольника,
PtInRect() – позволяет проверить, лежит ли заданная точка внутри прямоугольника, определяемого текущим объектом.
21.6. Создание приложений на основе библиотеки MFC в VC++ 6.0
Для создания приложения на основе MFC используется тип проекта MFC AppWizard (exe) [20–21]. Это полноценное 32-разрядное приложение для ОС Windows, использующее для взаимодействия с пользователем стандартное графическое окно Windows.
Мастер приложений позволяет создавать три варианта приложений такого типа: SDI,MDI,Dialog Based. Для каждого варианта приложения создается особый каркас проекта.
SDI-приложение (Single Document Interface), или приложение с интерфейсом одного документа, позволяет программе работать только с одним документом. Примером такого приложения могут быть программы текстовый редактор Блокнот или графический редактор Paint.
MDI-приложение (Multiple Documents Interface), или приложение с интерфейсом многих документов, может одновременно работать с несколькими документами или с несколькими копиями одного и того же документа. Примером такого приложения могут быть некоторые версии текстового редактора Word, Adobe PhotoShop.
Dialog Based Application или приложение, основанное на диалоге, имеет отличительную черту – диалоговую панель, используемую для ввода данных в программу пользователем или для вывода результатов вычислений на экран.
Для создания каркаса приложения необходимы действия:
Вызов команды File/New…
Настройка параметров проекта в окне AppWizard/Projects:
o тип приложения – MFC AppWizard (exe),
o имя проекта (Name),
o размещение проекта (Location),
o флажок создания нового рабочего пространства в состоянии «установлен».
o нажать OK.
Выбор варианта приложения (Single document, Multiple documents или Dialog based).
В результате будет создан каркас MFC-приложения, в который входят модули, содержащие описания основных классов приложения, и файл ресурсов *.rc, содержащий описания диалоговых панелей, строк, акселераторов и других ресурсов. Состав классов, включенных в приложение, зависит от выбранного варианта приложения.
