Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
41
Добавлен:
16.02.2016
Размер:
13.86 Mб
Скачать

Int cMainFrame::OnCreate(lpcreatestruct ipCreateStruct)

{ if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;

if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

{ TRACEO("Failed to create toolbar\n"); return-1; //ошибка при создании

}

if (!m_wndStatusBar.Create(this) ||

!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)))

{ TRACEO("Failed to create status bar\n"); return-1; // ошибка при создании }

// TODO: Remove this if you don't want tool tips or a resizeable toolbar // Следующий код можно удалить для отмены установленных // стилей панели инструментов: // с отображением подсказок и с изменением размера m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |

CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); // TODO: Delete these three lines if you don't want the toolbar to be dockable // Если следующий код удалить, то панель инструментов // не будет встраиваемой

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); return 0; }

BOOL CMainFrame::PreCreateWtodow(CREATESTRUCT& cs)

{ // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CFrameWnd::PreCreateWindow(cs);

}

///////////////////////////////////////////////////

// CMainFrame diagnostics

#ifdef_DEBUG

void CMainFrame::AssertValid() const

{ CFrameWnd::AssertValid(); }

void CMainFrame::Dump(CDumpContext& dc) const

{ CFrameWnd::Dump(dc); }

#endif//_DEBUG

////////////////////////////////////////////////

Листинг заголовочного файла Appl.h:

#include "resource.h" // main symbols class CApplApp : public CWinApp

{ public:

CApplApp(); // Overrides (переопределяемые методы)

//ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CApplApp) public:

virtual BOOL Initlnstance(); //}}AFX_VIRTUAL // Implementation

//{{AFX_MSG(CApplApp) afx_msg void OnAppAbout();

// NOTE - the ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code ! //}>AFX_MSG DECLARE_MESSAGE_MAP()

};

Создание шаблона MDI-приложения

Создание шаблона MDI-приложения с использованием AppWizard аналогично созданию шаблона SDI-приложения. Поэтому рассмотрим только те особенности, которые присущи приложениям с многооконным интерфейсом.

На рис. 7.10 показано диалоговое окно, отражающее шестой шаг мастера приложений AppWizard. В этом окне приведен список создаваемых производных классов, их базовых классов и имена создаваемых заголовочных файлов и файлов реализации.

Рис. 7.10. Классы, создаваемые для шаблона MDI-приложения

Как видно из приведенного диалогового окна, для MDI-приложения дополнительно создается производный класс CChildFrame, наследуемый от базового класса CMDIChildWnd. Этот класс реализует окно-рамку, связываемое с документом и отображением. Главное окно-рамка реализуется классом CMainFrame.

Дело в том, что для SDI-приложений существует только одно окно-рамка и при открытии нового документа не создается никакого нового окна и нового объекта документа. Документ открывается в уже существующем окне, при этом происходит повторная инициализация объекта документа. Для приложений с многооконным интерфейсом при открытии нового документа шаблоном документа создается новое окно-рамка и новый объект документ.

Далее приводится автоматически созданный AppWizard программный код MDI-приложения (только отличный от кода для SDI-приложения) с некоторыми сокращениями и поясняющими комментариями.

Листинг файла Арр2.срр:

// Арр2.срр : Определение поведения приложения BEGIN_MESSAGE_MAP(CApp2App, CWinApp)

ON_COMMAND(ID_APP_ABOUT, OnAppAbout) //...

ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)

ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)

ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup) END_MESSAGE_MAP()

CApp2App::CApp2App() // Конструктор класса { // TODO: add construction code here

}

// Создание объекта приложения

CApp2App tbeApp;

BOOL CApp2App::InitInstance() // Переопределяемый метод инициализации

{

// Здесь расположен код, полностью идентичный, как и для SDI-приложения CMultiDocTemplate* pDocTemplate; // Создание шаблона документа pDocTempIate = new CMuItiDocTempIate(

Соседние файлы в папке VC++Баженова