void Group::serialize(CArchive& ar, bool serialize_flag) { serialize_P(ar, serialize_flag); if (serialize_flag){ int count = NodeData.GetCount(); ar << point << point_end << linepattern << inner_color << line_color << inner_pattern << count; POSITION pos = NodeData.GetHeadPosition(); while (pos){ Figure* temp = (Figure*)NodeData.GetNext(pos); ar << temp->thisobject(); temp->serialize(ar, true); } count = Child.GetCount(); ar << count; pos = Child.GetHeadPosition(); while (pos){ Figure* temp = (Figure*)Child.GetNext(pos); ar << temp->thisobject(); temp->serialize(ar, true); } } else { int count; ar >> point >> point_end >> linepattern >> inner_color >> line_color >> inner_pattern >> count; NodeData.RemoveAll(); POSITION pos = NodeData.GetHeadPosition(); int t; for (int i = 0; i < count; i++){ ar >> t; switch (t){ case LINE:{ MyLine* temp = new MyLine(); NodeData.AddTail((void*)temp); temp->serialize(ar, false); break; } case POLYLINE:{ MyPolyline* temp = new MyPolyline(); NodeData.AddTail((void*)temp); temp->serialize(ar, false); break; } case ELIPSE:{ MyElipse* temp = new MyElipse(); NodeData.AddTail((void*)temp); temp->serialize(ar, false); break; } case RECTANGLE:{ MyRectangle* temp = new MyRectangle(); NodeData.AddTail((void*)temp); temp->serialize(ar, false); break; } case TEXT:{ MyTextDraw* temp = new MyTextDraw(); NodeData.AddTail((void*)temp); temp->serialize(ar, false); break; } case FREECURVE:{ MyFreeCurve* temp = new MyFreeCurve(); NodeData.AddTail((void*)temp); temp->serialize(ar, false); break; } } } ar >> count; Child.RemoveAll(); pos = Child.GetHeadPosition(); for (int i = 0; i < count; i++){ ar >> t; switch (t){ case MYGROUP:{ Group* temp = new Group(); Child.AddTail((void*)temp); temp->serialize(ar, false); break; } } } } }