Иллюстрированный самоучитель по Visual Studio.Net


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


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);

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

}

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

CRightView *pView - dynamic_cast<CRightView*>

(GetView(RUNTIME_CLASS(CRightView)));

pView->Show();

}

При работе с классами CFile, CFileException и CArchive используются статические переменные, которые задают режимы работы. Так, битовые флаги CFile::modeRead (для чтения) и CFile::shareDenyWrite (запретить запись всем другим процессам) задают режим открытия файла. Переменная CArchive::load (чтение) определяет направление сериализации.

Мы сделали достаточно много для правильного взаимодействия представлений документа, но при закрытии какого-либо из окон флаги m_bTreeExist и m_bDrawExist остаются неизменными, что, несомненно, нарушит логику поведения приложения. Событие закрытия окна-рамки необходимо обработать и скорректировать соответствующий флаг. Поэтому введите в классы CTreeFrame и CDrawFrame реакции на сообщение WM_CLOSE и вставьте внутрь обработчиков следующие коды:

void CTreeFrame::OnClose()

{

//====== Добываем адрес активного документа

CTreeDoc *pDoc = dynamic_cast<CTreeDoc*> (GetActiveDocument());

pDoc->m_bTreeExist = false;

CMDIChildWnd::OnClose();

}

void CDrawFrame::OnClose()

void CDrawFrame::OnClose()

{

CTreeDoc *pDoc = dynamic_cast<CTreeDoc*> (GetActiveDocument());

pDoc->m_bDrawExist = false;

CMDIChildWnd::OnClose() ;

}

Вы уже, наверное, привыкли к тому, что при введении функций-обработчиков, которые обращаются к объектам других классов приложения, надо корректировать директивы подключения заголовочных файлов.


Начало  Назад  Вперед