Avatar billede Lasse Novice
08. november 2001 - 19:05 Der er 19 kommentarer og
1 løsning

def af CHILD view

Jeg har oprettet et view vha. classWizard. Det er en ny klasse kaldet CAddDb som arver fra CFormView. Dette view skal nu ind i et Splitter Window, men idet jeg forsoeger, faar jeg fejlen at viewet ikke er defineret som CHILD. Hvordan goer jeg det?
Avatar billede jpk Nybegynder
08. november 2001 - 19:31 #1
Har du lavet en constructor i din klasse, der kalder CFormView\'s constructor?

CMyView::CMyView()
  : CFormView(CMyView::IDD)
{
}
Avatar billede jpk Nybegynder
08. november 2001 - 19:36 #2
Og så skal din dialog resource naturligvis være af typen child...
Avatar billede Lasse Novice
08. november 2001 - 23:06 #3
ja, jeg fandt selv ud af det, og det var nok den sidste del som du har svaret... Jeg havde bare oprettet en almindelig dialog boks, men den skulle selvfoelgelig vaere af typen Dialogview...

Men anyway... du faar dine point.. tak for hjaelpen.

jpk >> Du ved meget om C... du svarer altid paa mine spg... Jeg er newbee, men har haardt brug for at laere det... kan du foreslaa nogen steder/boeger jeg skal laese?
Avatar billede jpk Nybegynder
09. november 2001 - 00:01 #4
Tak for points...

Ang. læsemateriale, så skriver du ikke, hvad det er du vil lære?
Hvis det er MFC, som du jo anvender her, så er mit bedste bud \"Programming Windows with MFC\" af Jeff Prosise!
Bogen beskriver noget nær alt du vil få brug for den første lange tid og er fin både som opslagsværk og til at læse fra start til slut.

Jeg synes selv, at MFC er en særdeles god overbygning til C++ og det vil helt klart spare dig for en masse arbejde med at udvikle trivielle klasser, hvilket ofte er tilfældet i \'ren\' C++!!!
Det er selvfølgelig, som med så meget andet, et spørgsmål om smag og temperament...
Avatar billede Lasse Novice
09. november 2001 - 16:10 #5
OK, men den bog har jeg, så jeg må jo bare lige terpe den igennem... he he!

Jeg syntes bare jeg savner en beskrivelse af alle de mærkelige ting som wizarderne propper ind, f.eks.:
#ifdef bla bla bla
#AfxWin bla bla bla

Ikke at du skal forklare dem(er ikke sikker på at de er rigtig skrevet af), men en bog der går mere i dybden med alle disse \"mærkelige ting\".
Avatar billede jpk Nybegynder
09. november 2001 - 17:09 #6
Jep, man skal lige forstå hvad alt det gøgl er (sådan ser det i hvert fald i ud starten) som Wizard\'en propper ind... og spørg bare løs!

#ifndef betyder egentlig \"if not defined\", altså hvis \'efterfølgende\' ikke er defineret, så skal det defineres.
Forestil dig du har 2 filer med hver deres klasser. Klassen i den 1. fil har brug for at kende til den en klasse i den 2. fil og omvendt...
Hver fil kan ikke inkludere (#include\") den anden, da det jo giver en uendelig lykke!!!
Derfor, angiver filen, at hvis den ikke allerede er \'kendt\'af compileren, skal den læses, ellers ikke!
Avatar billede Lasse Novice
22. november 2001 - 01:37 #7
ok... jpk... jeg har et spg. mere... Jeg skal nok oprette et spg med nye point, men det er nemmere at stille det her, da det er en fortsaettelse herpaa.

Jeg har som sagt et splittervindue og i hvert af disse er der et view. Det ene view har en variable det andet view skal bruge. Hvordan goer jeg det?
Avatar billede Lasse Novice
22. november 2001 - 01:40 #8
jeg opretter splitter vinduet samt indhold vha.
    if (!m_wndSplitter.CreateStatic (this, 1, 2) ||
        !m_wndSplitter.CreateView (0, 1, RUNTIME_CLASS (CStaticViewVw), CSize (200, 0), pContext) || //CAddDb
        !m_wndSplitter.CreateView (0, 0, RUNTIME_CLASS (CAdd), CSize (253, 0), pContext))
        return FALSE;
    return TRUE;

Dette er jo en runtime ting.... hvad fanden goer man saaa????
Avatar billede jpk Nybegynder
22. november 2001 - 08:29 #9
Er det en variabel der reelt hører til i det andet view? Hvad indeholder/beskriver den?

Hvis du SKAL have adgang fra ét view til et andet, kan du gøre således:

// CToView er det view du skal have fat i fra CFromView
// I GetPane skal du angive den korrekte pane!! (her (0, 0))

CToView* CFromView::GetToView()
{
    return (CToView*)((CMainFrame*)AfxGetMainWnd())->GetPane(0, 0);
}
Avatar billede Lasse Novice
22. november 2001 - 16:13 #10
doc/view... doc referer til doc-koden i denne sammenhaeng, view til view-koden

ok, jeg har 2 views. Det ene er et formview med nogle knapper, i det andet vises der en pdf fil. I det view(faktisk doc) hvor der vises pdf filen, ligger der en variable hvori der staar: den fulde sti til pdf filen
Den skal jeg bruge i det andet view(doc), da jeg har brug for at laegge denne pdf fil over i en database... saa, det er bare en CString, og doc(til pdf\'en) har en funktion der hedder getfullpathname(noget i den stil...). Saa, det jeg skal er fra det ene view(formviewet - ikke dens doc) have fat i den funktion der ligger i det andets view(doc i dette tilfaelde) via en member funktion.

Ja, jeg har ledt efter klassen CToView, men kan ikke finde den... Jeg regner med at du mener CWnd
Avatar billede jpk Nybegynder
22. november 2001 - 16:24 #11
Meget rodet!!!
Hvis det er en variabel der logisk tilhører dit dokument (som fx stien til filen) bør du anbringe den netop der, i din dokumentklasse (CDocument-nedarvingen).
Altså kan du så bruge din GetDocument-metode til at få adgang til stien...

Det jeg mente med navnene CToView (To=til) og CFromView (From=fra) var naturligvis at angive fra hvilket view man gik!
Hvis du har to views, CStaticView & CAddView, kan du gøre sådan:

CStaticView* CAddView::GetToView()
{
    return (CStaticView*)((CMainFrame*)AfxGetMainWnd())->GetPane(0, 0);
}
Avatar billede Lasse Novice
22. november 2001 - 17:39 #12
Ja, jeg fandt enderlig langt om laenge ud af det... men du hjalp mig paa vej... der er oprettet et spg. med 40 point... tak for det..

CString pathToPDFFile = ((CStaticViewDoc*)((CStaticViewVw*)((CChildWnd*)((CMainFrame*)AfxGetMainWnd())->GetActiveFrame())->m_wndSplitter.GetPane(0,1))->GetDocument())->GetPathName();
Avatar billede jpk Nybegynder
22. november 2001 - 17:55 #13
Er det fra et view du skal hente noget i doc????
Hvis ja, kan du bare kalde CString pathToPDFFile = GetDocument())->GetPathName(); direkte!
Avatar billede Lasse Novice
22. november 2001 - 18:07 #14
jo, men det er ikke det view jeg staar i, saa jeg skal over i et andet view, og derfra hente noget fra doc
Avatar billede jpk Nybegynder
22. november 2001 - 18:31 #15
Nej!!!

Tilføj en GetDocument() metode til det view du skal bruge document fra!
Hvis den ikke allerede eksisterer i viewet, ken du bare kopiere den fra det andet view og ændre en smule i den...
Avatar billede Lasse Novice
23. november 2001 - 15:53 #16
ok... jeg fatter ikke lige det du siger... du siger at det kan goeres meget nemmere... jeg har folgende:

doc1      |    doc2
view1    |    view2


jeg vil nu gerne fra view2 til doc1. Det kan jeg da ikke bare goere ved et simpelt GetDocument() kald... Desuden har jeg i min laaaaaange loesning ogsaa GetDocument inde i, saa jeg bruger skam den metode :-)
Avatar billede jpk Nybegynder
26. november 2001 - 08:14 #17
Hmm, er du sikker på at dit design holder? Jeg bryder mig ikke om det med at skulle bruge doc1 fra view2...
Hvorfor har du i øvrigt flere doc\'s, når du bruger det samme doc i begge view\'s?

Avatar billede Lasse Novice
26. november 2001 - 16:30 #18
Nej, jeg er ikke sikker paa at mit design holder. Jeg er newbee, men ved godt at dette ikke holder. MEN, da jeg har stjaalet noget af koden fra et andet sted, saa er jeg lidt paa roeven mht. at \"reperere\" paa det da det er lige i overkanten for mig.
Men jeg kan da lige faa rettet op paa nogle ting her da: Hvis man med DocTemplate i 2 kald bruger den samme Doc, er det saa det SAMME document(en pointer), eller er det 2 forskellige?
Avatar billede jpk Nybegynder
26. november 2001 - 16:56 #19
Hvis det er fordi du gerne vil have forskellige view\'s for et document, kan du gøre noget lign.:

static const DYNAMICVIEWINFO MyViewClasses[] = {
  { RUNTIME_CLASS(CMyView1), \"View1\" },
  { RUNTIME_CLASS(CMyView2), \"View2\" },
  { NULL, NULL }
};

Du kan så bruge \"MyViewClasses\" i dit AddDocTemplate kald i stedet for \"RUNTIME_CLASS(CMyView)\"
Avatar billede jpk Nybegynder
26. november 2001 - 17:03 #20
På den anden side bliver det nok for indviklet hvis du ikke er helt sikker på hvad du gør.
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