Шаг 1079 - CDocument::AddView

void AddView( CView* pView );

Параметры
pView
Указатель на добавляемый просмотр.

Замечания
Вызовите эту функцию, чтобы прикрепить просмотр к документу. Эта функция добавляет определенный просмотр к списку просмотров, связанных с документом; функция также устанавливает указатель документа просмотра на этот документ. Рамка вызывает эту функцию при приложении недавно созданного объекта просмотра к документу; это происходит в ответ на File New, File Open, или New Window команды, или когда окно расщепляется.
Вызовите эту функцию только, если Вы вручную создаете и прикрепляете просмотр. Обычно Вы позволите рамке подключать документы и просмотры, определяя объект CDocTemplate, чтобы сопоставить класс документа, просматривать класс, и класс рамочного окна.

Пример

// Следующий пример переключает два просмотра в SDI (одиночный документ
// интерфейс) рамочное окно. Решение проекта должно быть сделано относительно
// оставлять ли неактивный просмотр, связанный с документом,
// так, что неактивный просмотр продолжает получать OnUpdate
// сообщения из документа. Это обычно связано с желанием 
// хранить неактивный просмотр непрерывно   с документом, даже 
// хотя это неактивно. Однако, выполнение так подвергается стоимостью эффективности,
// также как стоимость программирования выполнения OnUpdate подсказки.
// Это может быть менее дорого, в терминах эффективности и программирования,
// Этот пример иллюстрирует этот последний подход, 
// пересоединение недавно активного просмотра и разъединения недавно 
// неактивного просмотра, через обращения к CDocument::AddView и  RemoveView

BOOL CMainFrame::OnViewChange(UINT nCmdID)
{
	CView* pViewAdd;
	CView* pViewRemove;
	CDocument* pDoc = GetActiveDocument();
	UINT nCmdID;
    
	nCmdID = LOWORD(GetCurrentMessage()->wParam);
   
	if((nCmdID == ID_VIEW_VIEW1) && (m_currentView == 1))    return;
	if((nCmdID == ID_VIEW_VIEW2) && (m_currentView == 2))   return;
	if (nCmdID == ID_VIEW_VIEW2)
	{
		if (m_pView2 == NULL)
		{
			m_pView1 = GetActiveView();
			m_pView2 = new CMyView2;

// Обратить внимание, что, если OnSize был перегружен в CMyView2 
// и GetDocument () используется в этой перегрузке, это может 
//  причиной ошибки, если ошибка игнорируются,
// вызыветься нарушение доступа.
  
			m_pView2->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
				rectDefault, this, AFX_IDW_PANE_FIRST + 1, NULL);
		}
		pViewAdd = m_pView2;
		pViewRemove = m_pView1;
		m_currentView= 2;
	} else {
		pViewAdd = m_pView1;
		pViewRemove = m_pView2;
		m_currentView= 1;
	}
     
// Установить порожденный i.d. Из активного просмотра к AFX_IDW_PANE_FIRST,
// Так, чтобы CFrameWnd::RecalcLayout распределил этому 
// " Первая область окна " что часть клиентской области рамочного окна 
// Не распределенный, чтобы управлять областями. Установите порожденный i.d. Из 
// Другой просмотр к чему - нибудь другому чем AFX_IDW_PANE_FIRST; 
// Примеры включают порожденный идентификатор из двух просмотров.

	int nSwitchChildID = pViewAdd->GetDlgCtrlID();
	pViewAdd->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
	pViewRemove->SetDlgCtrlID(nSwitchChildID);

// Покажите недавно активный просмотр, и скройте неактивный просмотр.

	pViewAdd->ShowWindow(SW_SHOW);
	pViewRemove->ShowWindow(SW_HIDE);

// Подключить недавно активный просмотр с документом, и
 // отсоединяет неактивный просмотр.

	pDoc->AddView(pViewAdd);
	pDoc->RemoveView(pViewRemove);
	SetActiveView(pViewAdd);
	RecalcLayout();
}

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 24.02.2002