Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Использование класса 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. При этом последовательность операций очень напоминает прежние С-программы, за исключением того, что класс скрывает некоторые их детали. В результате несколько снижается количество операторов, но принципиально это прежний хорошо знакомый подход. Теперь, в частности, создать файл для чтения можно, используя единственный оператор.
Как видно из приведенной таблицы, набор методов класса CFile предоставляет широкие возможности для работы с файлами. · Чтобы получить доступ к файлу, сначала надо создать объект класса CFile. Конструктор класса позволяет сразу после создания такого объекта открыть файл. Но можно открыть файл и позднее, воспользовавшись методом Open.
Использование на примере основных методов класса CFile (Открыть файл, записать в файл, считать из файла). Использование стандартных диалоговых панелей для открытия и записи в файл. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2018-04-12; просмотров: 256. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |