Учебник по Visual C++ .Net



Взаимодействие представлений документа - часть 5


Getview(SCRightView::classCRightView)

Выражения:

RUNTIME_CLASS(CRightView)

И

&CRightView::classCRightView

эквивалентны. Вторая форма записи подсказывает вам, что в классе CRightView определена статическая переменная classCRightview типа CRuntimeClass, которая помогает по адресу объекта определить его тип на этапе выполнения.

Рассмотрим метод ProcessDocs класса CTreeDoc, который обрабатывает информацию о файлах документов, обнаруженных в текущей папке. Здесь демонстрируется, как связать архив (объект класса CArchive) с файлом (объектом класса CFile) и заставить объект прочесть данные из файла. Для этой цели используется всего" один временный объект poly класса с Polygon. Данные очередного документа сначала читаются из файла в этот объект — poly. Serialize (ar); а затем весь объект помещается в контейнер — m_Shapes .push_back (poly). Контейнеры устроены таким образом, что они создают свою собственную копию объекта и именно ее и хранят. Благодаря этому мы можем многократно использовать временный объект poly:

void CTreeDoc::ProcessDocs()

{

UINT nFiles = m_sFiles.size();

//====== Если документы не обнаружены

if (!nFiles)

return;

for (UINT i=0; i < nFiles; i++)

{

//====== Читаем все документы

GFile file; // Класс, управляющий файлами

CFileException e; // Класс для обработки сбоев

CString fn = m_sFiles[i); // Имя файла

if (Ifile.Open (fn, CFile::modeRead |

CFile::shareDenyWrite, &e) )

{

//=== В случае сбоя в зависимости от причины

//=== выдаем то или иное сообщение

CString rasg =

e.m_cause == CFileException::fileNotFound ? "Файл: " + fn + " не найден" : "Невозможно открыть " + fn; AfxMessageBox(msg);

return;

}

//====== Связываем архив с файлом

CArchive ar (sfile, CArchive::load);

CPolygon poly; // Временный полигон poly.Set(this);

// Обратный указатель poly.Serialize (ar);

//Читаем данные m_Shapes.push_back(poly);

// Запоминаем в массиве

}

//====== Отображаем результат в правом окне




Содержание  Назад  Вперед