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

ЖАНРЫ

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

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

Шрифт:

В шаблоне диалоговой панели следует установить только один стиль – WS_CHILD. Диалоговая панель управления будет выступать в качестве дочернего окна и не должна иметь ни заголовка ни рамки.

Готовый шаблон следует сохранить в файле ресурсов проекта. На этом подготовка шаблона диалоговой панели управления считается законченной и надо приступить к написанию программного кода для работы с нею.

В состав класса окна, в котором будет отображаться диалоговая панель управления, надо включить элемент данных класса CDialogBar. Этот элемент данных будет представлять диалоговую панель управления. Если диалоговая панель управления достаточно сложна и имеет много органов управления, то можно создать для нее отдельный класс

на основе базового класса CDialogBar. Этот класс следует дополнить методами, обрабатывающими сообщения от органов управления панели. Таким образом вы сможете разгрузить таблицу сообщений главного окна приложения.

Затем надо переопределить метод OnCreate класса окна и добавить в нем вызов метода Create класса CDialogBar для объекта представляющего диалоговую панель управления.

Если вы добавляете диалоговую панель управления к приложению, созданному с использованием средств MFC AppWizard, то в нем уже определен метод OnCreate и вам только остается добавить в него соответствующий вызов метода Create.

Органы управления диалоговой панели передают сообщения непосредственно своему родительскому окну. Добавьте в таблицу сообщений класса окна соответствующие макрокоманды для получения сообщений и включите в класс окна методы для их обработки.

В следующем разделе мы реализуем только что описанный алгоритм создания диалоговой панели управления на примере приложения DialogBar.

Приложение DialogBar

Создайте новый проект под названием DialogBar. В качестве типа приложения выберите из списка Type строку Application. Настройте проект DialogBar, точно также как вы настраивали проекты Bar и MultiBar: укажите, что приложение будет работать с библиотекой классов MFC.

Наберите в редакторе исходный текст приложения и сохраните его в файле DialogBar.cpp (листинг 3.10). Чтобы ускорить набор исходного текста приложения, за основу вы можете взять файл Bar.cpp приложения Bar. Готовый файл DialogBar.cpp включите в проект.

Листинг 3.10. Файл DialogBar.cpp

//============================================================

// Приложение DialogBar

// (c) Frolov G.V., 1996

// E-mail: frolov@glas.apc.org

//============================================================

// Исключаем редко используемые определения из

// включаемых файлов

#define VC_EXTRALEAN

// Включаемый файл для MFC

#include <afxwin.h>

#include <afxext.h>

#include <afxcmn.h>

// Включаемый файл для ресурсов приложения

#include "resource.h"

//============================================================

// Класс CDlgBarApp – главный класс приложения

//============================================================

class CDlgBarApp : public CWinApp {

public:

 // Мы будем переопределять метод InitInstance

 virtual BOOL InitInstance;

};

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

CDlgBarApp DlgBarApp;

//============================================================

//
Класс CDlgBarWindow – представляет главное окно

//============================================================

class CDlgBarWindow : public CFrameWnd {

 // Определяем панель управления

protected:

 // Панель управления на основе класса CDialogBar

 CDialogBar m_wndDialogBar;

protected:

 / Метод OnCreate используется для создания диалоговой

 // панели управления

 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

public:

 // Объявляем конструктор класса CDlgBarWindow

 CDlgBarWindow;

 // Объявляем методы для обработки команд от диалоговой

 // панелей управления

 afx_msg BOOL DlgBarCommand(UINT nID);

 afx_msg void DlgBarCombo;

 // Макрокоманда необходима, так как класс

 // CDlgBarWindow обрабатывает сообщения

 DECLARE_MESSAGE_MAP

};

//============================================================

// Метод BarCommand

// Обрабатывает команды, выводит на экран сообщение

//============================================================

BOOL CDlgBarWindow::DlgBarCommand(UINT nID) {

 CString szCommandAbout;

 // Загружаем текстовую строку с идентификатором,

 // соответствующим идентификатору поступившего командного

 // сообщения и выводим ее на экран

 if (szCommandAbout.LoadString(nID)) MessageBox(szCommandAbout);

 else {

// Ошибка при загрузке строкового ресурса

TRACE0("Failed to load string\n");

return -1;

 }

 return TRUE;

}

//============================================================

// Метод DlgBarCombo

// Обрабатывает команды, выводит на экран сообщение

//============================================================

void CDlgBarWindow::DlgBarCombo {

 // Отображаем сообщение о том, что сделан выбор из списка

 MessageBox("Combo-box selection changed");

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