15. marts 2001 - 08:35
#8
ok, større eksempler...
Her har jeg hentet oplysninger fra en DB på en server, via RPC, og viser dem så i et view.
void CGFoodView::LavSkema(RpcRaavarekatalog& katalog)
{
// Det gamle skema slettes
NedlaegSkema();
CRect rect;
GetClientRect(&rect);
SetScrollSizes(MM_TEXT, CSize(0, rect.Height()+1));
ScrollArea=30;
UINT StaticID=1500;
UINT EditID=2000;
// Det nye skema til indtastning og aflæsning af værdier opbygges
// Det sker ved at der dynamisk oprettes static- og edit-felter
// og en pointer til hver gemmes i STL vektorer
CRect rectStatic(100, 98+ScrollArea, 670, 122+ScrollArea);
CStatic* staticfield = new CStatic;
staticfield->Create(\"Tilsætn.ID Tilsætningsstof\\t Min\\t Max\\t Optimal\", WS_CHILD | WS_VISIBLE | WS_BORDER, rectStatic, this, StaticID);
ScrollArea += 30;
CString Extra[] = {\"Protein(g)\", \"Calcium(g)\", \"Fosfor(g)\", \"Natrium(g)\"};
for(int i=0; i<TILSAETNINGSSTOFFER; ++i)
{
CString fmt;
fmt.Format(\"%d\", i+1000);
CRect rectStaticID(100, 98+ScrollArea, 200, 122+ScrollArea);
CStatic* staticfield = new CStatic;
staticfield->Create(fmt, WS_CHILD | WS_VISIBLE, rectStaticID, this, StaticID++);
staticIdVector.push_back(staticfield);
CRect rectStatic(200, 98+ScrollArea, 670, 122+ScrollArea);
staticfield = new CStatic;
staticfield->Create(Extra[i], WS_CHILD | WS_VISIBLE, rectStatic, this, StaticID++);
staticVector.push_back(staticfield);
CRect rectMin(400, 100+ScrollArea, 465, 120+ScrollArea);
CNumEdit* editfield = new CNumEdit;
editfield->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP | ES_RIGHT, rectMin, this, EditID++);
editfield->SetWindowText(\"0.0000\");
editVector.push_back(editfield);
CRect rectMax(500, 100+ScrollArea, 565, 120+ScrollArea);
editfield = new CNumEdit;
editfield->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP | ES_RIGHT, rectMax, this, EditID++);
editfield->SetWindowText(\"100.0000\");
editVector.push_back(editfield);
CRect rectStaticOpt(600, 100+ScrollArea, 665, 120+ScrollArea);
staticfield = new CStatic;
staticfield->Create(\"\", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT, rectStaticOpt, this, StaticID++);
staticOptVector.push_back(staticfield);
ScrollArea += 30;
}
ScrollArea += 30;
CRect rectStatic2(100, 98+ScrollArea, 670, 122+ScrollArea);
CStatic* staticfield2 = new CStatic;
staticfield2->Create(\"RåvareID Råvare\\t\\t Min\\t Max\\t Optimal\", WS_CHILD | WS_VISIBLE | WS_BORDER, rectStatic2, this, StaticID);
ScrollArea += 30;
for(i=0; i<katalog.AntalRaavarer(); ++i)
{
CString id;
id.Format(\"%d\", katalog[i].GetRaavareID());
CRect rectStaticID(100, 98+ScrollArea, 200, 122+ScrollArea);
CStatic* staticfield = new CStatic;
staticfield->Create(id, WS_CHILD | WS_VISIBLE, rectStaticID, this, StaticID++);
staticIdVector.push_back(staticfield);
CRect rectStatic(200, 98+ScrollArea, 670, 122+ScrollArea);
staticfield = new CStatic;
staticfield->Create(katalog[i].GetRaavarenavn(), WS_CHILD | WS_VISIBLE, rectStatic, this, StaticID++);
staticVector.push_back(staticfield);
CRect rectMin(400, 100+ScrollArea, 465, 120+ScrollArea);
CNumEdit* editfield = new CNumEdit;
editfield->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP | ES_RIGHT, rectMin, this, EditID++);
editfield->SetWindowText(\"0.0000\");
editVector.push_back(editfield);
CRect rectMax(500, 100+ScrollArea, 565, 120+ScrollArea);
editfield = new CNumEdit;
editfield->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP | ES_RIGHT, rectMax, this, EditID++);
editfield->SetWindowText(\"100.0000\");
editVector.push_back(editfield);
CRect rectStaticOpt(600, 100+ScrollArea, 665, 120+ScrollArea);
staticfield = new CStatic;
staticfield->Create(\"\", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT, rectStaticOpt, this, StaticID++);
staticOptVector.push_back(staticfield);
ScrollArea += 30;
}
ScrollArea += 30;
//Felter til FE og Pris
CString Result[] = {\"Foderenheder i blanding\", \"Pris pr. kg\"};
for(i=0; i<2; ++i)
{
CRect rectStatic(100, 98+ScrollArea, 670, 122+ScrollArea);
staticfield = new CStatic;
staticfield->Create(Result[i], WS_CHILD | WS_VISIBLE | WS_BORDER, rectStatic, this, StaticID++);
staticVector.push_back(staticfield);
CRect rectStaticNum(600, 100+ScrollArea, 665, 120+ScrollArea);
staticfield = new CStatic;
staticfield->Create(\"\", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT, rectStaticNum, this, StaticID++);
staticOptVector.push_back(staticfield);
ScrollArea += 30;
}
// Der sættes fokus i det første felt
editVector[0]->SetFocus();
// Det scrollbare område opdateres efter skemaets størrelse
ScrollArea += 200;
CRect ScrollRect;
GetClientRect(&ScrollRect);
if(ScrollRect.Height()+1 > ScrollArea)
ScrollArea = ScrollRect.Height()+1;
SetScrollSizes(MM_TEXT, CSize(0, ScrollArea));
}