Avatar billede kamikaze Nybegynder
12. april 2002 - 14:53 Der er 20 kommentarer og
1 løsning

MFC >> Adgang til variable

Jeg har en dialog der fylder en std::list med data. I en anden dialog vil jeg gerne have adgang til at iterere i denne liste.

Mit SPM: Hvor skal jeg placere min std::list (i hvilken klasse), og hvordan får jeg adgang til den?
Avatar billede kamikaze Nybegynder
12. april 2002 - 14:55 #1
pt. er listen placeret i CMainFrame som public member, men kan jeg se den fra en dialog?
Avatar billede jpk Nybegynder
12. april 2002 - 15:40 #2
Hvor hører dine data til rent designmæssigt?
Er det en doc/view app?
Avatar billede kamikaze Nybegynder
12. april 2002 - 15:44 #3
Det er en SDI app, men jeg har ikke helt fattet pointen med Doc/view endnu.
Avatar billede kamikaze Nybegynder
12. april 2002 - 15:45 #4
Kan jeg 'se' min *View-class fra dialogerne?
Avatar billede kamikaze Nybegynder
12. april 2002 - 15:46 #5
Sorry, jeg mener kan jeg 'se' min *doc-class?
Avatar billede kamikaze Nybegynder
12. april 2002 - 15:51 #6
Jeg kan se der en en funktion der hedder GetActiveDocument(), men den returnerer CDocument* og har ikke min liste som member...
Avatar billede jpk Nybegynder
12. april 2002 - 15:54 #7
Meningen med doc/view er faktisk god nok...
Det er for bedre at afspejle en god designmæssige struktur.
Forestil dig du har nogle data (document). Disse data vil du naturligvis gerne holde adskilt fra det grafiske, altså undgå en stærk binding mellem dine data og dit grafiske interface (view).
MFC's doc/view-arkitektur tillader dig, på ethvert tidspunkt, at udskifte dit view, for at give en anden repræsentation af dine data. Det kan du gøre uden det får indflydelse på dit document.
Du kan således også have flere views for de samme data.

Det du så skal tage stilling til er om din ovennævnte liste hører til dine data generelt, eller om den blot er midlertidig?
Avatar billede kamikaze Nybegynder
12. april 2002 - 15:56 #8
jpk >> Den hører til mine data generelt, og hører designmæssigt til i doc.
Avatar billede jpk Nybegynder
12. april 2002 - 15:57 #9
Hvis listen hører til dine data, kan du, som du selv er inde på, lægge den i dit document og gøre fx:

CMyDoc* pDoc = (CMyDoc*)GetActiveDocument();
pDoc->Get...
Avatar billede kamikaze Nybegynder
12. april 2002 - 15:57 #10
Så vidt jeg kan se, skal jeg 'manuelt' tilføje den til *Doc klassen. Men hvordan får jeg fat i den fra dialogerne?
Avatar billede kamikaze Nybegynder
12. april 2002 - 15:57 #11
Ok, prøver det lige...
Avatar billede kamikaze Nybegynder
12. april 2002 - 16:00 #12
Jeg får flg. compile error:
error C2065: 'CContactsDoc' : undeclared identifier
Hvor skal jeg (hvis det skal være efter bogen) placere 'include "CContactsDoc.h"' henne? I Dialog-headerer?
Avatar billede kamikaze Nybegynder
12. april 2002 - 16:04 #13
Hmmm....GetActiveDocument() findes ikke i dialog-klassen...
Avatar billede jpk Nybegynder
12. april 2002 - 16:04 #14
Det afhænger af hvor du bruger den.
Hvis du blot bruger den i din .cpp-fil, så include den der.
Avatar billede kamikaze Nybegynder
12. april 2002 - 16:07 #15
OK, nu fik jeg fat i pointen og det virker. Der er ikke nogen restriktioner på hvor og hvad jeg inkluderer?
Avatar billede kamikaze Nybegynder
12. april 2002 - 16:08 #16
(Husk lige et svar, as usual :-))
Avatar billede jpk Nybegynder
12. april 2002 - 16:09 #17
Du kan enten give din dialog en pointer til dine data/dit document eller gøre således:

CMyDox* pDoc = ((CMyApp*)AfxGetApp())->GetDocument();
Avatar billede jpk Nybegynder
12. april 2002 - 16:10 #18
Du får dit svar...

Hvad tænker du på ang. restriktioner m. include?
Avatar billede kamikaze Nybegynder
12. april 2002 - 16:13 #19
Mht. restriktioner, tænker jeg på 'StdAfx.h' -> Troede alle inkludes skulle placeres her.
Avatar billede jpk Nybegynder
12. april 2002 - 16:16 #20
Du kan i grunden inkludere hvor du vil, opdelingen i filer sker jo typisk udfra et designmæssigt aspekt.
Avatar billede kamikaze Nybegynder
12. april 2002 - 16:18 #21
Ok. 1000 tak for din hjælp. Det speeder min indlæring gevaldigt op :-)
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