Avatar billede july Nybegynder
25. april 2002 - 00:15 Der er 8 kommentarer

CList -> serelisering !

Skal gemme  af typen CPoint

Avatar billede kamikaze Nybegynder
25. april 2002 - 01:13 #1
Forudsat din variabel hedder: CPoint pt[10];
/////////////////////////////////////////////////////////////////////////////
// CSerializeDoc serialization

void CSerializeDoc::Serialize(CArchive& ar)
{
    if (ar.IsStoring())
    {
        // TODO: add storing code here
        for (int i=0; i<10; ++i) ar << pt[i];
    }
    else
    {
        // TODO: add loading code here
        for (int i=0; i<10; ++i) ar >> pt[i];
    }
}
Avatar billede kamikaze Nybegynder
25. april 2002 - 01:15 #2
Altså, du bruger 'ar' og << operatoren til at gemme, og 'ar' og >> operatoren til at hente.
Avatar billede kamikaze Nybegynder
25. april 2002 - 01:22 #3
Sorry, læste ikke dit spm ordentligt. HER:

Forudsat din listbox hedder m_lbSerialize;
/////////////////////////////////////////////////////////////////////////////
// CSerializeDoc serialization

void CSerializeDoc::Serialize(CArchive& ar)
{
    if (ar.IsStoring())
    {
        // TODO: add storing code here
                CPoint pt;
        for (int i=0; i<m_lbSerialize.GetCount(); ++i)
        {
            pt = m_lbSerialize.GetItemData(i);
            ar << pt;
        }
    }
Avatar billede july Nybegynder
25. april 2002 - 01:33 #4
nej jeg har en liste med en masse punkter !!!!

Den liste skal gemmes og jeg skriver

CFigure::serialise
pointerlist.seri....(ar)

Den klasse hvor pointerlisten ligger i er nedarvet fra CFigure
og jeg gemmer andre ting i Cfigure.... Hvis du vil se kode kan jeg godt sende den !!!
Avatar billede kamikaze Nybegynder
25. april 2002 - 01:35 #5
Kan du ikke poste noget af den her? (altså din kode :-)
Avatar billede july Nybegynder
25. april 2002 - 01:37 #6
jo
Avatar billede july Nybegynder
25. april 2002 - 01:41 #7
fra klasse CFIgure
oid CFigure::Serialize(CArchive &ar)
{

    CObject::Serialize(ar);

    if(ar.IsStoring())
    {
        ar << strText << Size << objType << Startpoint << Endpoint << lineColor << fillColor << iObjectNumber << iObjectCount << Selected;
    }
    else
    {
        ar >> strText >> Size >> objType >> Startpoint >> Endpoint >> lineColor >> fillColor >> iObjectNumber >> iObjectCount >> Selected;
    }

}
IMPLEMENT_SERIAL(CFigure,CObject,1);

Fra klasse CFreedraw som er nedarvet fra cfigure:
    CFigure::Serialize(ar);
    pointlist.Serialize(ar);

alle andre figure virker fint, altså line, circle osv. da de bare er nedarvet fra cfigure, og har ikke en liste i sig selv som cfreedraw har

i CFreedraw listen gemmes der Cpoint
void CFreedraw::AddNode(CPoint* point)
{
    static     int inttest=0;
    inttest++;
    CString test;
    test.Format("%d \n",inttest);
    TRACE(LPCTSTR(test));
    pointlist.AddTail(point);
}
problemet opstår når den gentegner udfra listen vises alt underligt på skærmen: altså det der er tegnet med freedraw

BOOL CFreedraw::Draw(CDC *pDC)
{
    CPen Pen(PS_SOLID,Size,lineColor);
    CPen *pOldPen = pDC->SelectObject(&Pen);
    pDC->SetROP2(R2_COPYPEN);
    CPoint firstpoint=Startpoint;
    CPoint *lastpoint;

    POSITION pos=pointlist.GetHeadPosition();
    pDC->MoveTo(*pointlist.GetAt(pos));
    while(pos!=NULL)
    {
        lastpoint=pointlist.GetAt(pos);
        pDC->LineTo(*lastpoint);
        firstpoint.x=lastpoint->x;
        firstpoint.y=lastpoint->y;
        pointlist.GetNext(pos);
    }

    pDC->SelectObject(pOldPen);

    return TRUE;
}
Avatar billede kamikaze Nybegynder
25. april 2002 - 14:08 #8
Skal du ikke serialize hver enkelt element i listen?

altså:
CPOint pt;
//...
POSITION pos = pointlist.GetHeadPosition();
while(pos != NULL)
{
  pt = pointlist.GetAt(pos);
  ar << pt;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester