Avatar billede garlan Nybegynder
06. marts 2003 - 13:23 Der er 2 kommentarer og
1 løsning

Hvordan åbner man et nyt view inde i et view

Hej

Jeg har lavet et MDI program hvor man skal logge på for
at kunne bruge programmet!
mit problem er:
når man trykker på knappen log ind så skal det nuværende view forsvinde og en ny menu linie skal frem?

hvordan får jeg Viewet væk og evt. åbner et nyt view og Menu?
Avatar billede garlan Nybegynder
07. marts 2003 - 08:18 #1
der er vist sket en fejl.. beskrivelsen mangler!

spørgsmålet gik på hvordan åbner jeg et nyt view inde i et view?
jeg har lavet et MDI program, hvor det er meningen at man skal logge ind for
at kunne bruge programmet!
hvordan får jeg lukke log ind viewet og åbnet en ny menu bar og evt. view
med alle programmets funktioner?

M.V.H

Garlan
Avatar billede jpk Nybegynder
18. marts 2003 - 08:53 #2
Jeg går ud fra det her er MFC også...

Du kan lave en funktion til at skifte view, fx således:
BOOL CYourDoc::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;
    }

    // Draw new view.
    CCreateContext context;
    context.m_pNewViewClass = pNewViewClass;
    context.m_pCurrentDoc = this;
    context.m_pNewDocTemplate = NULL;
    context.m_pLastView = NULL;
    context.m_pCurrentFrame = pChild;
    if (!pNewView->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0),
                pChild, AFX_IDW_PANE_FIRST, &context))
    {
        TRACE0("Warning: couldn't create view for frame\n");
        delete pNewView;
        return FALSE;
    }
   
    pNewView->SendMessage(WM_INITIALUPDATE, 0, 0);  // WM_INITIALUPDATE is defined in afxpriv.h
    pChild->RecalcLayout();
    pNewView->UpdateWindow();
    pChild->SetActiveView(pNewView);
    return TRUE;
}

Her er logikken til at validere og skifte view:
void CYourDoc::Validate(CString csUser, CString csPw)
{
    if(csUser == "User" && csPw == "Password")
    {
        CRuntimeClass* pNewViewClass = RUNTIME_CLASS(CYourView);
        SwitchToView(pNewViewClass);
    }
}

Validate skal du så kalde fra din login-form...
Avatar billede garlan Nybegynder
20. marts 2003 - 15:23 #3
Takker
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