Шаблон документов приложения создает объекты класса CMainFrame динамически. Для этого в определении класса указана макрокоманда DECLARE_DYNCREATE, объявлен конструктор, не имеющий параметров, а в файле реализации добавлена макрокоманда IMPLEMENT_DYNCREATE.

// Объекты класса CMainFrame могут создаваться динамически

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

Таблица сообщений класса CMainFrame

Класс CMainFrame может получать и обрабатывать сообщения, поэтому в определении класса указана макрокоманда DECLARE_MESSAGE_MAP, а в файле реализации класса MainFrm.cpp, расположена таблица сообщений.

// Таблица сообщений класса CMainFrame

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

 //{{AFX_MSG_MAP(CMainFrame)

 ON_WM_CREATE()

 //}}AFX_MSG_MAP

END_MESSAGE_MAP()

Изначально в таблице сообщений расположена единственная макрокоманда ON_WM_CREATE. Эта макрокоманда устанавливает для обработки сообщения WM_CREATE метод OnCreate. Как вы знаете, сообщение WM_CREATE передается функции окна сразу после его создания, но до того, как окно появится на экране.

Конструктор и деструктор класса CMainFrame

MFC AppWizard определяет для вас конструктор и деструктор класса CMainFrame. Вы можете расположить в конструкторе и деструкторе CMainFrame код для инициализации объектов класса.

// Конструктор класса CMainFrame

CMainFrame::CMainFrame() {

// TODO:

}

// Деструктор класса CMainFrame

CMainFrame::~CMainFrame() {}

Метод OnCreate

Метод OnCreate определен в классе CWnd следующим образом.

afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

Параметр lpCreateStruct содержит указатель на объект CREATESTRUCT, содержащий характеристики создаваемого окна. Эта структура уже была нами описана ранее.

При нормальной работе OnCreate должен вернуть значение 0, чтобы продолжить создание окна. Если OnCreate возвращает –1, окно будет удалено (уничтожено).

MFC AppWizard переопределяет метод OnCreate в классе CMainFrame. Поэтому для обработки сообщения WM_CREATE будет вызван именно переопределенный метод OnCreate класса CMainFrame.

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {

 // Вызываем метод OnCreate базового класса

 if (CFrameWnd::OnCreate(lpCreateStruct) == –1) return –1;

 // Создаем панель управления toolbar

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

  // Ошибка при создании панели управления toolbar

  TRACE0('Failed to create toolbar ');

  return –1;

 }

 // Создаем панель состояния status bar

 if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof (indicators)/sizeof(UINT))) {

  // Ошибка при создании панели состояния status bar

  TRACE0('Failed to create status bar ');

  return –1;

 }

 // TODO: вы можете изменить характеристики панели

 // управления, убрав некоторые флаги CBRS_

 m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

 // TODO: вы можете запретить перемещение панели управления,

 // если удалите следующие три строки программы

 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

 EnableDocking(CBRS_ALIGN_ANY);

 DockControlBar(&m_wndToolBar);

 return 0;

}

Основное назначение метода OnCreate заключается в том, что он сначала вызывает метод OnCreate базового класса CFrameWnd , а затем создает и отображает внутри главного окна панель управления toolbar и панель состояния status bar.

Метод OnCreate базового класса CFrameWnd выполняет обработку сообщения WM_CREATE по умолчанию и возвращает нулевое значение если обработка прошла без ошибок.

В случае возникновения ошибок при обработке сообщения в базовом классе возвращается –1. Метод CMainFrame::OnCreate при этом также прерывает дальнейшую обработку и возвращает –1, вызывая удаление окна.

Панель управления и панель состояния

Наиболее интересная задача, которую выполняет метод OnCreate, заключается в отображении панелей управления и состояния. Для панели управления и панели состояния в библиотеке классов MFC предусмотрены два класса CStatusBar и CToolBar.

Классы CStatusBar и CToolBar имеют длинную цепочку наследования.

CStatusBar←| ←CControlBar←CWnd←CmdTarget←CObject

CToolBar  ←|

Полное описание этих классов заняло бы слишком много места, поэтому мы ограничимся рассказом о самых главных методах, необходимых для работы с панелями управления и состояния.

Панель управления

Класс CToolBar представляет панель управления toolbar. Обычно панель управления содержит несколько кнопок и разделителей между ними. Для панели управления определен специальный ресурс типа Toolbar.

Чтобы создать панель управления toolbar, следует выполнить следующие действия.

• Создать ресурс, описывающий панель toolbar

• Создать объект класса CToolBar. Он будет представлять панель управления

• Вызвать метод Create класса CToolBar, чтобы создать панель и связать ее с объектом представляющим панель управления

• Вызвать метод LoadToolBar класса CToolBar. Он загрузит ресурс диалоговой панели и завершит

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату