Страница 1 из 1
Несколько представлений одного документа
Добавлено: 13 мар 2005, 14:24
Nadi
Как в SDI сделать несколько представлений для одного документа, чтобы например при клике на команде меню одно представление (например EditView) заменялось другим (например форма) в том же окне? Заранее спасибо всем кто ответит.

Добавлено: 14 мар 2005, 14:16
Romeo
При клике создать новый View, а старый закрыть. Создастся видимость того, что изменения произошли в текущем окне.
Добавлено: 14 мар 2005, 21:49
Tviksi
Описывать долго, если есть желание напишите мне свой адрес я пришлю примерчик

Добавлено: 18 мар 2005, 01:05
Tviksi
Код: Выделить всё
// Примерчик:
/* В меню Edit перечисленны возможные вьюшки, при выборе пункта меню меняем текущую вьюшку: */
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_COMMAND_RANGE(ID_VIEW_EDITBAR, ID_VIEW_RECORDBAR, OnViewDlgBar)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////
void CMainFrame::OnEdit(UINT ID)
{
CView* pOldActiveView = GetActiveView();
CView* pNewActiveView = (CView*)GetDlgItem(ID);
if(pNewActiveView == NULL)
{
switch(ID)
{
case ID_EDIT_DEVELOPER:
pNewActiveView = (CView*)new CDeveloperView;
break;
case ID_EDIT_ERROR:
pNewActiveView = (CView*)new CErrorView;
break;
case ID_EDIT_MSG:
pNewActiveView = (CView*)new CMsgView;
break;
case ID_EDIT_PLAN:
pNewActiveView = (CView*)new CPlanView;
break;
case ID_EDIT_QUESTION:
pNewActiveView = (CView*)new CQuestionView;
break;
case ID_EDIT_VERSION:
pNewActiveView = (CView*)new CVersionView;
break;
}
CCreateContext context;
context.m_pCurrentDoc = pOldActiveView->GetDocument();
pNewActiveView->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CFrameWnd::rectDefault, this, ID, &context);
pNewActiveView->OnInitialUpdate();
}
SetActiveView(pNewActiveView);
pNewActiveView->ShowWindow(SW_SHOW);
pOldActiveView->ShowWindow(SW_HIDE);
if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CDeveloperView))
pOldActiveView->SetDlgCtrlID(ID_EDIT_DEVELOPER);
if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CErrorView))
pOldActiveView->SetDlgCtrlID(ID_EDIT_ERROR);
if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CMsgView))
pOldActiveView->SetDlgCtrlID(ID_EDIT_MSG);
if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CPlanView))
pOldActiveView->SetDlgCtrlID(ID_EDIT_PLAN);
if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CQuestionView))
pOldActiveView->SetDlgCtrlID(ID_EDIT_QUESTION);
if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CVersionView))
pOldActiveView->SetDlgCtrlID(ID_EDIT_VERSION);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
RecalcLayout();
}
////////////////////////////////////////////////////////////////////////////
// Кстати, обработка меню у меня происходит в CMainFrame
// Не забыть подключить вьюшки :)
Добавлено: 18 мар 2005, 02:31
AiK
Tviksi, постарайся плз использовать BBCode [ code] (без пробелов) при публикации длинных листингов.
Добавлено: 18 мар 2005, 03:12
Tviksi
Aik, постараюсь
