Чтение онлайн

ЖАНРЫ

Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2

Фролов Григорий Вячеславович

Шрифт:

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

CMainFrame::CMainFrame {

 // TODO:

}

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

CMainFrame::~CMainFrame {}

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

Таблица сообщений класса CMainFrame содержит только одну макрокоманду ON_WM_CREATE, которая устанавливает для обработки сообщения WM_CREATE метод OnCreate. Сообщения WM_CREATE приходит во время создания главного окна приложения.

Непосредственно перед таблицей сообщений класса CMainFrame

располагается макрокоманда IMPLEMENT_DYNAMIC. Она указывает, что объекты класса CMainFrame могут создаваться динамически во время работы приложения:

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

IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)

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

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)

 //{{AFX_MSG_MAP(CMainFrame)

 ON_WM_CREATE

 //}}AFX_MSG_MAP

END_MESSAGE_MAP

Метод OnCreate класса CMainFrame

Метод OnCreate класса CMainFrame создает и отображает на экране панели управления и состояния:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {

 if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;

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

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

TRACE0("Failed to create toolbar\n");

return -1;

 }

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

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

TRACE0("Failed to create status bar\n");

return -1;

 }

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

 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

 EnableDocking(CBRS_ALIGN_ANY);

 DockControlBar(&m_wndToolBar);

 return 0;

}

Структура indicators, описывающая индикаторы панели состояния, определена в файле MainFrm.h следующим образом:

static UINT indicators[] = {

 ID_SEPARATOR,

 ID_INDICATOR_CAPS,

 ID_INDICATOR_NUM,

 ID_INDICATOR_SCRL,

};

Сейчас мы не станем подробно останавливаться на процедуре создания панелей состояния и управления. Во первых, в 24 томе мы уже рассматривали метод OnCreate однооконного приложения Single. Он фактически полностью повторяет метод OnCreate приложения Multi. Во вторых мы посвятили проблеме использования меню, панелей состояния и панелей управления отдельный раздел “Меню, панели управления и панели состояния”. Прочитав его,

вы полностью поймете как устроен метод OnCreate класса CMainFrame.

Метод PreCreateWindow класса CMainFrame

Метод PreCreateWindow вызывается перед созданием окна и позволяет изменить его характеристики. В нашем приложении метод PreCreateWindow не используется и просто выполняет обрработку по умолчанию:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {

// TODO:

 return CMDIFrameWnd::PreCreateWindow(cs);

}

Методы AssertValid и Dump класса CMainFrame

В отладочной версии приложения класс CMainFrame содержит переопределения виртуальных методов AssertValid и Dump. Эти методы определены в базовом классе CObject и используются при отладке приложения:

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

// Диагностические методы класса CMainFrame

#ifdef DEBUG

void CMainFrame::AssertValid const {

 CMDIFrameWnd::AssertValid;

}

void CMainFrame::Dump(CDumpContext& dc) const {

 CMDIFrameWnd::Dump(dc);

}

Класс дочернего окна MDI

Многооконное приложение строится с использованием большего числа классов, чем однооконное приложение. Помимо классов главного окна приложения и классов окна просмотра документа, в нем определен еще один класс, непосредственно связанный с отображением дочерних окон MDI. Этот класс называется CChildFrame и он наследуется от базового класса CMDIChildWnd , определенного в библиотеке MFC:

class CChildFrame : public CMDIChildWnd {

 DECLARE_DYNCREATE(CChildFrame)

public:

 CChildFrame;

// Attributes

public:

// Operations

public:

// Overrides

 //{{AFX_VIRTUAL(CChildFrame)

 virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

 //}}AFX_VIRTUAL

// Implementation

public:

 virtual ~CChildFrame;

#ifdef _DEBUG

 virtual void AssertValid const;

 virtual void Dump(CDumpContext& dc) const;

#endif

protected:

 //{{AFX_MSG(CChildFrame)

 //}}AFX_MSG

 DECLARE_MESSAGE_MAP

};

Элементы класса CChildFrame вы можете просмотреть в окне Project Workspace на странице ClassView (рис. 1.11).

Поделиться с друзьями: