C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как создать дополнительные Виды при помощи функции CreateNewFrame() / MFC / Visual C++

Как создать дополнительные Виды при помощи функции 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():

  • Исходный код CDocTemplate::CreateNewFrame() содержится в DOCTEMPL.CPP. Он включает следующее:
          if (!pFrame->LoadFrame(m_nIDResource,
               WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, // стили фрейма поумолчанию
               NULL, &context) 

    Так как этот код создаёт фреймовое окно с NULL в качестве родителького окна, то MFC в качестве родительского окна использует главное окно приложения.

  • CreateNewFrame() создаёт как фрейм так и Вид, а не только Вид.

Если по некоторым причинам, CreateNewFrame() не совсем соответствует Вашим целям, то её исходный код очень полезен для представления себе механизма создания фреймов и видов.