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?
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
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...