Как создать дополнительные Виды при помощи функции CreateNewFrame()Функция CDocTemplate::CreateNewFrame() создаёт дополнительные виды (views) документа в приложении MDI, написанном с использованием Microsoft Foundation Class Library. Прототип функции CreateNewFrame() выглядит следующим образом: CFrameWnd * CDocTemplate::CreateNewFrame(CDocument *, CFrameWnd *) Для вызова этой функции необходимо указать ей два парметра: указатель на объект CDocument (документ, для которого функция создаст вид) и указатель на фреймовое окно, свойства которого будут продублированы. Как правило, второй параметр функции NULL. Когда приложение вызывает CreateNewFrame(), то создаётся новое фреймовое окно и вид в этом окне. Тип фреймового окна и тип вида зависят от шаблона документа (CDocTemplate), связанного документом, указанным при вызове функции CreateNewFrame(). Чтобы лучше понять использование CreateNewFrame(), давайте рассмотрим два примера. Первый пример, это файл WINMDI.CPP в исходном коде Microsoft Foundation Class Library. WINMDI.CPP объявляет функцию CMIDFrameWnd::OnWindowNew() которая вызывает CreateNewFrame() для добавления дополнительного фрейма и вида для указанного документа. Приложение вызывает OnWindowNew() каждый раз, когда пользователь выбирает New в меню приложения MDI. Функция OnWindowNew() содержит две существенные строчки: CFrameWnd * pFrame =
pTemplate->CreateNewFrame(pDocument, pActiveChild);
pTemplate->InitialUpdateFrame(pFrame, pDocument);
Этот код создаёт и отображает новый фрейм и вид документа. Другой пример, это файл DOCMULTI.CPP, который так же находится в исходном коде MFC. Функция CMultiDocTemplate::OpenDocumentFile() включает в себя следующий код: CFrameWnd * pFrame = CreateNewFrame(pDocument, NULL);
ЗАМЕЧАНИЕ: Второй параметр равен NULL, так как функция OpenDocumentFile() предполагает, что программист не заинтересован в дублировании других фреймов, которые содержат Виды этого документа. Пример CHKBOOK так же демонстрирует создание дополнительных фреймов и видов документов. В CHKBOOK.CPP, функция CChkBookApp::OpenDocumentFile() включает в себя следующий код: CChkBookDoc * pDoc =
(CChkBookDoc*)CWinApp::OpenDocumentFile(lpszFileName);
if (pDoc == NULL)
return NULL;
CMDIChildWnd * pframe =
((CMDIFrameWnd *)AfxGetApp()->m_pMainWnd)->MDIGetActive();
CFrameWnd * pNewFrame =
m_pCheckViewTemplate->CreateNewFrame(pDoc, NULL);
if (pNewFrame == NULL)
return pDoc;
m_pCheckViewTemplate->InitialUpdateFrame(pNewFrame, pDoc);
Далее идут две причины, по которым Вы
используете CreateNewFrame():
Если по некоторым причинам, CreateNewFrame() не совсем соответствует Вашим целям, то её исходный код очень полезен для представления себе механизма создания фреймов и видов.
|