Будем дальше мучать наш проект. Сохранение как известно производится в функции Serialize класса документа. На данный момент она у нас такая.
void CTestOleContCntrItem::Serialize(CArchive& ar) { ASSERT_VALID(this); // Call base class first to read in COleClientItem data. // Since this sets up the m_pDocument pointer returned from // CTestOleContCntrItem::GetDocument, it is a good idea to call // the base class Serialize first. COleClientItem::Serialize(ar); // now store/retrieve data specific to CTestOleContCntrItem if (ar.IsStoring()) { // TODO: add storing code here } else { // TODO: add loading code here } }Как видите не сохраняется рамка, в которой он находится. Это совсем не хорошо. Давайте изменим наш метод. Я хочу, чтобы сохранялось как содержимое объекта так и его местоположение.
void CTestOleContCntrItem::Serialize(CArchive& ar) { ASSERT_VALID(this); COleClientItem::Serialize(ar); if (ar.IsStoring()) { ar << m_Rect; } else { ar >> m_Rect; } }
Ну что ? Попробуем ? Запускайте проект. Вставляем лист Excel. Схватите за рамку и поставьте его в центре. Введите две цифры и сложите их по формуле. Сохраните файл. Остановите работу программы, запустите снова и прочитайте файл. Вы увидите таблицу на том же месте. Только активизировать мы её не сможем, так как не умеем обработывать двойные щелчки мышью и так далее.