Сериализация

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Aram
Сообщения: 18
Зарегистрирован: 16 апр 2007, 13:07

Сериализация

Сообщение Aram » 28 окт 2007, 14:26

При нажатии на кнопку вызывается функция член CTestView::CreatEditForLine

Код: Выделить всё

void CTestView::CreatEditForLine(int i, CPoint point, CClientDC &dc)
//point координата конца линии
{Count=new CEdit;
CPoint Temp;
Temp.x=point.x;
Temp.y=point.y;
dc.LPtoDP(&Temp);
Count->Create(WS_CHILD  |WS_VISIBLE |WS_BORDER,						(CRect((Temp.x)+10,Temp.y,Temp.x+55,Temp.y+25)),
		this,ID_EDIT);
pDoc->m_Line_Test[pDoc->m_Line_Test.GetSize()-1]->m_Edit_Test.Add(Count);
//где pDoc указатель на класс документа, 
}

// m_Line_Test- массив обектов класса CLine

Код: Выделить всё

class CTestDoc : public CDocument
{
CTypedPtrArray<CObArray, CLine *> m_Line_Test;
};
// m_Edit_Test-массив обектов класса CEdit.

Код: Выделить всё

class CLine : public CShape  
{
CTypedPtrArray<CObArray, CEdit *> m_Edit_Test;
};

CShape порожден от CObject
При рисовании линии рисуется EditBox. И указатель на обект CEdit записывается в массив m_Edit_Test.
Делаю сериализацию

Код: Выделить всё

void CTestDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{	
	m_Line_Test.Serialize(ar);	
	}
	else
	{	
	m_Line_Test.Serialize(ar);
	}
}
void CLine::Serialize(CArchive & ar)
{
CObject::Serialize(ar);
	if(ar.IsStoring())
	{	
         m_Edit_Test.Serialize(ar);
	}
	else
	{	
	m_Edit_Test.Serialize(ar);

	}
}

Но при сохранении документа выдается сообщение «Failed to save document»
Скажите пожалуйста как мне сериализировать EditBox,
Заранее благодарю,

Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Re: Сериализация

Сообщение Romeo » 23 ноя 2007, 11:14

Едит бокс сериализовать не получиться. Сериализовать следует его параметры, такие как координаты верхнего левого угла и размеры. Т.е. при сохраниеи сериализуешь в архив его параметры. А при загрузке создаёшь новый EditBox и выставляешь ему эти параметры.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

Ответить