Como permutar Views numa
Aplicação SDI.
Definir as constantes que pretendemos - em qualquer lugar - para identificar as Views
const UINT VENDAS_VIEW = 1U;
const UINT PRODUTOS_VIEW = 2U;
//...etc...
NA CMainFrame
--------------------
CMainFrame::CMainFrame()
{
m_CurrentViewID = VENDAS_VIEW; // qual a view por defeito
}
void CMainFrame::SeleccionaView(UINT ViewID)
{
CView * pOldActiveView = GetActiveView(); // obtém a view actual
CView * pNewActiveView = (CView*)GetDlgItem(ViewID);
if( pNewActiveView == NULL )
{
switch(ViewID)
{
case PRODUTOS_VIEW:
pNewActiveView = (CView*) new CProdutosView;
break;
//... etc ...
default:
AfxMessageBox("ID da View errado!");
return;
}
CCreateContext context;
context.m_pCurrentDoc = pOldActiveView->GetDocument();
pNewActiveView->Create(NULL,NULL,0L,CFrameWnd::rectDefault,this,ViewID,&context);
pNewActiveView->OnInitialUpdate();
}
SetActiveView(pNewActiveView);
pOldActiveView->ShowWindow(SW_HIDE);
pNewActiveView->ShowWindow(SW_SHOW);
pOldActiveView->SetDlgCtrlID(m_CurrentViewID);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
m_CurrentViewID=ViewID;
RecalcLayout();
}
Deve-se definir uma função que permita aceder ao SeleccionaView da CMainFrame,
esta função pode estar associada a uma opção de menu, ou ao que quisermos.
Por exemplo:
void CXXXView::OnButtonX()
{
((CMainFrame*)GetParentFrame())->SeleccionaView(PRODUTOS_VIEW);
}
Neste caso muda a View para ficar com a FormView de CProdutosView.