Jeg er igang med et MFC application med multiple documents.
Jeg vil gerne kunne skifte mellem forms. har fundet et kode eksempel der kan gøre dette. Nu er det bare at funktionen der styrer dette, kun virker hvis den ligger i whateverDoc.cpp filen.
jeg har oprettet et event til menuen, men funktionen skal erklæres i whateverApp filen.. ellers er menupunktet grayed.
Problemet er at jeg kan ikke kalde funktion der ligger i whateverDoc klassen.. compileren melder: error C2352: 'CPowerlynxFieldTestAdminDoc::SwitchToView' : illegal call of non-static member function
Der findes ikke noget der hedder GatActiveDocument under AfxGetMainWnd.
Tror ikke at det er kaldet til funktionen SwitchToView der crasher applikationen. Har testet kaldet ved at udkommentere al kode i funktionen.
Her er Funktionen.
BOOL CPowerlynxFieldTestAdminDoc::SwitchToView(CRuntimeClass* pNewViewClass) { CMDIFrameWnd* pMainWnd = (CMDIFrameWnd*)AfxGetMainWnd(); // Get the active MDI child window. CMDIChildWnd* pChild = (CMDIChildWnd*)pMainWnd->MDIGetActive(); // Get the active view attached to the active MDI child window. CView* pOldActiveView = pChild->GetActiveView(); // If we're already displaying this kind of view, no need to go further. if (pOldActiveView->IsKindOf(pNewViewClass)) return TRUE;
// Set flag so that document will not be deleted when view is destroyed. BOOL bAutoDelete = m_bAutoDelete; m_bAutoDelete = FALSE; // Delete existing view pOldActiveView->DestroyWindow(); // restore flag m_bAutoDelete = bAutoDelete;
// Create new view. CView* pNewView = (CView *)pNewViewClass->CreateObject(); if (pNewView == NULL) {
TRACE1("Warning: Dynamic create of view type %Fs failed\n",pNewViewClass->m_lpszClassName); return FALSE; }
pNewView->SendMessage(WM_INITIALUPDATE, 0, 0); // WM_INITIALUPDATE is defined in afxpriv.h pChild->RecalcLayout(); pNewView->UpdateWindow(); pChild->SetActiveView(pNewView); return TRUE;
Det virkede.. men applikation crasher når jeg prøver at køre funktionen. hvis jeg debugger stopper den ved linien BOOL bAutoDelete = m_bAutoDelete; i SwitchToView funktionen.. hvad det kunne skyldes´ved jeg virkelige ikke..
Havde i starten osse placeret funktioen i App men da compileren brokkede sig over kaldet context.m_pCurrentDoc = this; blev løsningen at den skulle ligge i Doc.
Jo, men i så fald skulle du sende mig hele projektet og jeg er ikke sikker på at v2003 kan læse projektfiler fra v2005...
Synes godt om
Ny brugerNybegynder
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.