Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Использование класса CMessages в программе




Теперь, когда класс CMessages создан, к нему смогут обращаться методы классов документа и представления приложения My. Разверните в окне ClassView класс CMyDoc и, дважды щелкнув на имени метода OnNewDocument(), вызовите его текст в окне редактора кода. Вместо строк комментария TODO вставьте следующие строки:

m_messages.SetMessage(1,"Default Message 1")

m_messages.SetMessage(2, "Default Message 2")

m_messages.SetMessage(3, "Default Message 3")

Поскольку методы класса документа не могут напрямую обращаться к защищенным членам класса CMessages, каждый из них инициализируется функцией SetMessage() этого класса.

Теперь разверните в окне ClassView класс CMyView и, дважды щелкнув на имени метода OnDraw(), вызовите его текст в окне редактора кода. После редактирования текст этого метода должен выглядеть следующим образом:

 

void CMyView::OnDraw(CDC* pDC)

{

CMyDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

pDC->TextOut(20, 20, pDoc->m_messages.GetMessage(1));

pDC->TextOut(20, 40, pDoc->m_messages.GetMessage(2));

pDC->TextOut(20, 60, pDoc->m_messages.GetMessage(3));}

Теперь внесем изменения в метод OnEditChangemessages() класса представления. Этот метод будет изменять содержимое документа, обращаясь к методам доступа и к переменным класса CMessages.

void CMyView::OnEditChangemessages()

{CMyDoc* pDoc = GetDocument()

CTime now = CTime::GetCurrentTime();

CString changetime = now. Format( "Changed at %B %d %H:%M:%S");

 

pDoc->m_messages.SetMessage(1,CString(“String 1”) + changetime);

pDoc->m_messages.SetMessage(2,CString(“String 2”) +changetime);

pDoc->m_messages.SetMessage(3,CString(“String 3”) +changetime);

pDoc->SetModifiedFlag();

Invalidate();}

Теперь предстоит доопределить функцию Serialize() — член класса документа приложения, в котором данные из объекта m_messages должны записываться-считываться с диска. Это выполняется на удивление просто — вызывается одноименная функция-член класса, которому принадлежит объект, содержащий данные документа.

 

void CMyDoc::Serialize(CArchive&ar)

{m_messages.Serialize(ar);

if (ar. IsStoring())

{// TODO: сюда вставьте операторы сохранения данных.}

else {//TODO: сюда вставьте операторы загрузки данных.}}

Как видно, после вызова метода Serialize() для объекта m_messages, функции Serialize() — члену класса документа больше и делать нечего. Обратите внимание, что при вызове m_messages.Serialize() в качестве единственного аргумента передается ссылка на объект класса CArchive.

 

Непосредственное чтение и запись файлов. Класс CFile. Методы класса CFile, режимы доступа к файлу.

Непосредственное чтение и запись файлов

Хотя использование встроенной в MFC технологии сохранения-восстановления данных и обеспечивает основные требования приложения при работе с файлами, иногда необходимо реализовать нестандартные процедуры управления файловой системой, не укладывающиеся в рамки этой технологии. Например, может возникнуть необходимость вывести информацию в файл, из которого не нужно снова считывать данные в объекты программы, или тот способ записи-считывания, который реализуется в функции Serialize(), вас не устраивает, поскольку там возможен только последовательный доступ к файлу (ввод-вывод в поток). В этих случаях можно использовать знакомые всем, кто когда-либо программировал в среде DOS, методики программирования файловых операций — непосредственное создание файла, чтение и запись информации в файл. Но даже если вы и решитесь снизойти до такого уровня программирования задач управления файлами, средства MFC все равно облегчат вам жизнь. Для непосредственного управления процессами ввода-вывода в файл в распоряжение программиста MFC предоставляет класс CFile и производные от него.

Класс CFile

Включенный в состав MFC класс CFile инкапсулирует все функции, связанные с обработкой файлов любого типа. Собираетесь ли вы использовать обычный последовательный способ записи-чтения данных или организовать файл с произвольным доступом к данным, в любом случае можно использовать методы класса CFile. При этом последовательность операций очень напоминает прежние С-программы, за исключением того, что класс скрывает некоторые их детали. В результате несколько снижается количество операторов, но принципиально это прежний хорошо знакомый подход. Теперь, в частности, создать файл для чтения можно, используя единственный оператор.

 

Функция   Назначение
Конструктор Создает экземпляр класса CFilе. Если передать аргумент, имя файла открывает заданный файл
Деструктор Уничтожает экземпляр класса CFile. Если соответствующий файл открыт, закрывает, его перед удалением экземпляра класса
Abort () Немедленно закрывает файл, не обращая внимания на ошибки
Close() Закрывает файл
Duplicate() Создает экземпляр класса для дубликата файла
Flush() Сбрасывает данные из потока
GetFileName() Считывает имя файла
GetFilePath() Считывает полный путь файла
GetFileTitle() Считывает имя файла без расширения (file title)
GetLength() Считывает длину файла
GetPosition() Считывает текущую позицию в файле
GetStatus() Считывает статус файла
LockRange() Блокирует фрагмент файла для доступа со стороны других процессов
Open() Открывает файл
Read() Считывает данные из файла
Remove() Стирает файл
Rename() Переименовывает файл
Seek() Переставляет указатель текущей позиции в файле
SeekToBegin() Устанавливает указатель текущей позиции, на начало файла
SeekToEnd() Устанавливает указатель текущей позиции на конец файла
SetFilePath( ) Устанавливает путь к файлу
SetLength() Устанавливает длину файла
SetStatus() Устанавливает статус файла
UnlockRange() Снимает блокировку фрагмента файла
Write() Записывает данные в файл

 

Как видно из приведенной таблицы, набор методов класса CFile предоставляет широкие возможности для работы с файлами.

· Чтобы получить доступ к файлу, сначала надо создать объект класса CFile. Конструктор класса позволяет сразу после создания такого объекта открыть файл. Но можно открыть файл и позднее, воспользовавшись методом Open.

 

 

Использование на примере основных методов класса CFile (Открыть файл, записать в файл, считать из файла). Использование стандартных диалоговых панелей для открытия и записи в файл.










Последнее изменение этой страницы: 2018-04-12; просмотров: 247.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...