- •3 Базовые классы библиотеки mfc
- •Класс cObject
- •Методы и переменные класса cObject
- •Класс cWinApp
- •IpszResourceName - указатель на строку, содержащую имя ресурса пиктограммы. (Тип параметра также может быть cString.) nIdResource - id ресурса пиктограммы.
- •Методы - обработчики сообщений
- •Класс cWnd
- •Методы инициализации
- •Методы управления состоянием окна
- •Управление размером и положением окна
- •Методы управления доступом
- •Методы обновления и перерисовки окна
- •IpRectUpdate - структура rect, определяющая координаты обновляемой прямоугольной области. Данный параметр игнорируется, если prgnUpdate содержит ненулевой указатель области.
- •Методы преобразования координат
- •Методы работы с текстом окна
- •Методы управления линейкой прокрутки
- •Методы управления курсором ввода
- •Методы управления элементами диалогового окна
- •IpString - указатель на буфер, содержащий выбранную строку списка.
- •IpStr - указатель на буфер, в который заносится текст или заголовок элемента управления.
- •Методы работы с меню
- •Методы управления таймером
- •Предупреждающие методы
- •Методы управления сообщениями
- •Переопределяемые методы
- •Методы, вызываемые для обработки сообщений
- •IpCreateStruct - структура createstruct, содержащая информацию о создаваемом объекте cWnd.
- •Класс cFile
- •Члены класса
- •IpszFileName - строка, указывающая в кодировке Windows абсолютный или относительный путь к имени файла. Не может содержать сетевого имени.
Класс cFile
Класс CFile предоставляет средства небуферизованного ввода/вывода для двоичных файлов. Его производный класс CStdioFile поддерживает работу с текстовыми файлами (буферизованными потоками ввода/вывода), а производный класс CMemFile - с файлами, расположенными в оперативной памяти.
Библиотека MFC использует для работы с документами и их сохранения объекты класса CArchive и метод Serialize, что освобождает от использования напрямую объекта класса CFile. Более подробно механизм сериализации данных будет рассмотрен в гл. 6.
Как правило, дисковый файл открывается автоматически в конструкторе CFile и закрывается в деструкторе. Однако статические члены класса позволяют определить состояние файла без его открытия.
Члены класса
CFile::m_hFile
Переменная типа UINT, содержащая указатель файла (в операционной системе), если он открыт, или CFile::hFileNull, если указатель не назначен.
CFUe 0;
CFile Cint hFile);
CFile (LPCTSTR IpszFileName, UINT nOpenFlags); throw (CFileException);
Конструктор класса по умолчанию (без параметров) не открывает файла, но устанавливает m_hFile равным CFile::hFileNull. При использовании этого конструктора для открытия файла следует вызвать метод Open, который в случае возникновения ошибки бросает исключение CFUeException.
Конструктор с одним параметром создает объект CFile, соответствующий существующему файлу, указанному параметром hFile. При этом не выполняется никаких проверок для режима доступа или типа файла. При разрушении объекта CFile файл не закрывается и его следует закрыть самостоятельно.
Конструктор с двумя параметрами создает объект CFile и открывает coответствующий файл с указанным именем. Фактически конструктор объелиняет выполнение конструктора по умолчанию и метод Open. Если при открытии файла происходит ошибка, то конструктор бросает исключение.
Параметры:
hFile - указатель открытого файла.
IpszFileName - путь к имени файла (относительный или абсолютный) nOpenFlags - значение, определяющее режим разделения и режим доступа и указываемое комбинацией (используя оператор ИЛИ |) следующих флажков: CFile: :modeCreate - вызов конструктора для создания нового файла. Если файл уже существует, то его длина усекается и устанавливается равной нулю; CFile: :modeNoTruncate - этот флажок комбинируется с флажком modeCreate.
Если файл уже существует, то его длина не усекается до нуля; CFile::modeRead - файл открывается только на чтение; CFile: :modeReadWrite - файл открывается на чтение и на запись; CFile: :modeWrite - файл открывается только на запись; CFile: :modeNoInherit - файл не может быть наследован дочерними процессами;
CFile::shareDenyNone - открывает файл без запрета доступа к нему другим процессам на чтение и на запись;
CFiIe::shareDenyRead - открывает файл с запретом доступа к нему другим процессам на чтение;
CFile: :shareDenyWrite - открывает файл с запретом доступа к нему другим процессам на запись;
CFile::shareExclusive - открывает файл в эксклюзивном режиме: с запретом доступа к нему другим процессам на чтение и на запись;
CFile::typeText - устанавливает текстовый режим со специальной обработкой пар возврат каретки - конец строки (используется в производных классах);
CFile: :typeBinary - устанавливает двоичный режим (используется в производных классах).
Пример:
|
char* pFileName = "mytest.txt"; TRY // Вызов конструктора с двумя параметрами { CFile filel (pFileName, CFile::modeCreate | CFile::modeWrite);} CATCH (CFileException, e) // Обработка исключения { #ifdef_DEBUG afxDump << "Файл не может быть открыт " « e->m cause « "\n"; #endif } END_CATCH |
virtual CFile* Duplicate () const; throw (CFileException);
Метод создает для указанного файла дубликат объекта CFile.
virtual BOOL Open (LPCTSTR IpszFileName, UINT nOpenFlags, CFileException* pError = NULL);
Метод используется для открытия файла совместно с конструктором по умолчанию.
При возникновении ошибки метод возвращает значение FALSE. При этом если задан параметр pError, указывающий на существующий объект CFileException (отличный от NULL), то в случае возникновения ошибки метод будет бросать исключение; если pError указан равным NULL, то исключение брошено не будет.
В следующей таблице представлены возможные результаты выполнения данного метода.
|
Значение pError |
Возникновение ошибки |
Возвращаемое значение |
Содержание CFileException |
|
NULL |
Нет |
TRUE |
не определено |
|
Указатель на CFileException |
Нет |
TRUE |
не изменяется |
|
NULL |
Ошибка |
FALSE |
не определено |
|
Указатель на CFileException |
Ошибка |
FALSE |
описание ошибки |
Пример:
|
CFilefilel; CFileException e; char* pFileName = "mytest.txt"; if (Ifilel.Open (pFileName, CFile::modeCreate | CFile::modeWrite, &e)) { #ifdef_DEBUG afxDump « "Файл не может быть открыт " « e.m_cause « "\n"; #endif } |
virtual void Close (); throw (CFileException);
virtual void Abort ();
Эти методы закрывают файл, ассоциированный с данным объектом, и делают его недоступным на чтение или запись. Если файл не будет закрыт до разрушения объекта, то деструктор сам его закроет.
Метод CFile::Abort отличается от CFile::Close тем, что при возникновении ошибки исключение не бросается.
При использовании динамического выделения памяти для объекта CFile (посредством оператора new) после закрытия файла следует освободить эту память оператором delete.
Методы устанавливают переменную m_hFile равной CFile::hFileNull.
virtual UINT Read (void* ipBuf, UINT nCouni); throw (CFileException);
Метод читает данные из файла, ассоциированного с указанным объектом, в буфер ipBufn возвращает количество переданных байт.
Параметры:
IpBuf- указатель на буфер, используемый для читаемых данных. п Count - максимальный размер буфера в байтах. Для чтения файла в тем стовом режиме пара символов возврат каретки - конец строки считается как один символ.
|
extern CFilefilel; char pbuffer[ 100]; UINT nBytesRead = filel.Read (pbufer, 100); |
virtual void Write (const void* IpBuf, UINT nCount); throw (CFileException);
Метод записывает данные из буфера IpBuf в файл, ассоциированный с указанным объектом, и возвращает количество записанных байт.
Параметры:
IpBuf- указатель на буфер. п Count - количество записываемых байт. virtual LONG Seek (LONG lOff, UINT nFrom); throw (CFileException);
Этот метод позволяет изменять текущую позицию доступа для данного файла. Первоначально при открытии файла указатель позиции доступа устанавливается на 0 - начало файла. Если возможно установить требуемую позицию, то метод возвращает новое значение для позиции - количество байт от начала файла. В противном случае возвращаемое значение не определено и метод выполняет бросок исключения CFileException.
Параметры:
lOff- количество байт, на которое передвигается текущая позиция доступа. nFrom - одно из следующих значений, указывающих режим перемещения: CFile::begin - на lOff байт вперед от начала файла; CFile: xurrent - на lOff байт от текущей позиции файла; CFile::end - на lOff баш от конца файла. Для перемещения внутрь файла
значение lOffдолжно быть отрицательным. void SeekToBegin (); throw (CFileException);
Метод устанавливает текущую позицию доступа на начало файла.
Этот метод равнозначен методу Seek (0L, CFile: :begin).
DWORD SeekToEnd (); throw (CFileException);
Метод устанавливает текущую позицию доступа на конец файла и возвращает длину файла (в байтах).
virtual DWORD GetLength () const; throw (CFileException);
Метод возвращает текущую логическую длину файла в байтах (без вычисления).
virtual void SetLength (DWORD dwNewLen); throw (CFileException);
Метод устанавливает новую длину файла.
Параметры:
dwNewLen - Новая длина файла в байтах. Если это значение больше, чем текущая длина файла, то размер файла будет увеличен, если меньше, то файл будет усечен.
Отметим, что для производного класса CMemFile этот метод может бросать исключение CMemoryException. virtual void LockRange (DWORD dwPos, DWORD dwCount); throw (CFileException);
Метод блокирует указанный диапазон байтов в открытом файле, предотвращая к ним доступ других процессов. Если файл уже заблокирован, то метод бросает исключение. Одновременно можно заблокировать несколько неперекрывающихся диапазонов.
Параметры:
dwPas - Отступ блокируемого диапазона от начала файла. dwCount - Количество блокируемых байт. virtual void UnlockRange (DWORD dwPos, DWORD dwCount); throw (CFileException);
Метод разблокирует указанный диапазон байтов. При этом параметры разблокируемого диапазона должны полностью совпадать с указанными при блокировке. Метод следует вызывать для каждого разблокируемого диапазона.
virtual DWORD GetPosition () const; throw (CFileException);
Метод возвращает текущее значение позиции доступа (как 32-битовое значение DWORD).
BOOL GetStatus (CFileStatus& rStatus) const;
static BOOL PASCAL GetStatus (LPCTSTR ipszFileName, CFileStatusA rStatus);
Первый метод получает состояние открытого файла, ассоциированного с данным объектом CFile. При этом никакого значения в член структуры m_szFullName не заносится.
Второй статический метод получает состояние для файла с указанным именем и копирует имя файла в m_szFullName.
Параметры:
rStatus - ссылка на структуру CFileStatus, создаваемую пользователем для занесения в нее информации о состоянии файла. Структура CFileStatus имеет следующие члены:
CTime m_ctime - дата и время создания файла; CTime m_mtime - дата и время последней модификации; CTime m_atime - дата и время последнего доступа к файлу на чтение; LONG m_size - логический размер файла в байтах, отображаемый командой DIR;
BYTE m_attribute - байт атрибутов файла;
char m_szFullName [_МАХ_РАТН]- абсолютное имя файла в кодировке Windows;
