Gemme objecter i MFC's egen linkede liste
Jeg arbejder lige fortiden med at skrive et program i MFC. Jeg modtager med en event styret funktion data fra serial porten og vil gerne efter at disse er blevet behandlet gemme dem i et object og ind i en linkede liste for senere at kunne tegne en graf ud fra dette.Den event styrede funktion bliver kaldt for hvergang serial porten for input modtager input der sker hvert sekund.
Mit problem er at jeg ikke kan tegne en fornuftig graf udfra de dataer som ligger i den linkede liste da det lader til at alle daterne er de samme. Jeg har afprøvet tegngraf funktion ved at oprette et array med data i disse og dette virkede efter hensigt dog dette går galt vis jeg bruger inputet fra den linkede liste.
Jeg har brugt MFC's egen linkede liste CObList.
Her er den event styrede funktion:
void CMainFrame::OnReceiving(WPARAM port)
{
CClientDC dc(this);
int ageFlag;
pos = pList->GetHeadPosition();
_package = pSerial->getFrame();
ageFlag = pProtocol->decoder(_package);
pList->AddTail(pProtocol->ptr_toCykel);
MyGraf *pulsGraph = new MyGraf();
pulsGraph->graphDrawing(countint, this);
delete pulsGraph;
}
Her er cpp filen for decodern:
#include "Protocol.h"
#include "CycleComputerData.h"
Protocol::Protocol(){ptr_toCykel = new CycleComputerData;}
Protocol::~Protocol()
{}
int Protocol::decoder(CString frames)
{
int flag = 0; //flag which tells our program if age was with the
//current string or not
switch(frames.GetAt(0))
{
case ':':
flag = group_5(frames);
break;
default:
return -1;
}
return flag;
}
int Protocol::group_5(CString frames)
{
CString tempString = "5";
ptr_toCykel->setID(tempString);
tempString = "";
ptr_toCykel->setGear(frames.GetAt(1)); // sætter gear
for(int i=2; i<5; i++)
tempString = tempString + frames.GetAt(i);// lægger i'ende plads sammen med temp stringen
ptr_toCykel->setPuls(tempString); // sætter puls
tempString = "";
for(i=5; i<8; i++)
tempString = tempString + frames.GetAt(i);
ptr_toCykel->setSpeed(tempString); // sætter hastighed
tempString = "";
// kontrolere om stringen indeholder age eller ej
if(frames.GetLength() == 10)
{
for(int i=8; i<10; i++)
{
tempString = tempString + frames.GetAt(i);
}
ptr_toCykel->setAge(tempString); // sætter aldern
return 1;
}
return 0;
}
Og her er selve objected jeg gerne vil gemme i den linkede liste:
//@file CycleComputerData.h
// This module costructs cycle computer.
// a complex object, (data received from bike)
////////////////////////////////////////////////////
#ifndef _CycleComputerData_H_
#define _CycleComputerData_H_
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
//////////////////////////////////////////////////////////////////////////////////////
// CycleComputerData
class CycleComputerData : public CObject
{
// Attributes
private:
CString _speed;
CString _gear;
CString _age;
CString _puls;
CString _id;
public:
//Constructor
CycleComputerData() { _speed,_gear,_id,_puls, _age; };
// ~CycleComputerData();
//Getters
CString getCurrentSpeed() { return(_speed); };
CString getCurrentGear() { return(_gear); };
CString getCurrentAge() { return(_age); };
CString getCurrentPuls() { return(_puls); };
CString getID() { return(_id); };
CycleComputerData* getMuObj() { return (this); };
//Setters
void setSpeed(CString speed) { _speed = speed; };
void setGear(CString gear) { _gear= gear; };
void setAge(CString age) { _age = age; };
void setPuls(CString puls) { _puls = puls; };
void setID(CString id) { _id = id; };
};
/////////////////////////////////////////////////////////////////////////////////
#endif//_CycleComputerData_H_
Håber at de giver nogen mening.