KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Александр Фролов - Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн "Александр Фролов - Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2". Жанр: Программирование издательство -, год -.
Перейти на страницу:

 IDC_COMBO_COLOUR, 0x403, 7, 0, 0x6559, 0x6c6c, 0x776f, "00"

 IDC_COMBO_COLOUR, 0x403, 6, 0, 0x6c42, 0x6361, 0x006b,

 IDC_COMBO_COLOUR, 0x403, 6, 0, 0x6857, 0x7469, 0x0065, 0

END


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

//

// String Table

//


STRINGTABLE DISCARDABLE

BEGIN

 IDC_RADIO_LEFT   "Left radio box"

 IDC_RADIO_CENTER "Center radio box"

 IDC_RADIO_RIGHT  "Right radio box"

 IDC_BUTTON_SET   "Set button pressed"

END


STRINGTABLE DISCARDABLE

BEGIN

 IDC_BUTTON_CLEAR "Clear button pressed"

END


#endif // Russian resources

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


#ifndef APSTUDIO_INVOKED

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

// Generated from the TEXTINCLUDE 3 resource.

//


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

#endif // not APSTUDIO_INVOKED

Идентификаторы ресурсов приложения DialogBar и идентификаторы органов управления диалоговой панели IDD_DIALOG_BAR определены в файле resource.h. Этот файл создается автоматически редактором ресурсов Microsoft Visual C++. Исходный текст файла представлен в листинге 3.12.

Листинг 3.12. Файл resource.h

//{{NO_DEPENDENCIES}}

// Microsoft Developer Studio generated include file.

// Used by DialogBar.rc

//

#define IDD_DIALOG_BAR   101

#define IDC_RADIO_LEFT   1004

#define IDC_RADIO_CENTER 1005

#define IDC_RADIO_RIGHT  1006

#define IDC_BUTTON_SET   1007

#define IDC_BUTTON_CLEAR 1008

#define IDC_COMBO_COLOUR 1012


// Next default values for new objects

//

#ifdef APSTUDIO_INVOKED

#ifndef APSTUDIO_READONLY_SYMBOLS

#define _APS_NEXT_RESOURCE_VALUE 104

#define _APS_NEXT_COMMAND_VALUE  40001

#define _APS_NEXT_CONTROL_VALUE  1014

#define _APS_NEXT_SYMED_VALUE    101

#endif

#endif

Постройте приложение DialogBar и запустите его. На экране появится главное окно приложения, в верхней части которого отображается диалоговая панель управления (рис. 3.19).

Рис. 3.19. Приложение DialogBar


Поработайте с приложением DialogBar. Если вы будете нажимать на кнопки диалоговой панели управления, изменять положение переключателя или выбирать новые строки из списка combo-box, то на экране будут появляться короткие сообщения, описывающие выбранный орган управления.

Как работает приложение DialogBar

В приложении DialogBar определены всего только два класса – это главный класс приложения CDlgBarApp и класс главного окна приложения CDlgBarWindow. Как и во многих других приложениях, посвященных использованию панелей управления, главное окно приложения по сути является его единственным окном. Однако мы сохранили за ним это почетное название, чтобы внести однообразие в описание приложений, созданных с использованием MFC AppWizard и без него.

Главный класс приложения CDlgBarApp

Главный класс приложения CDlgBarApp наследуется от базового класса CWinApp. Объект DlgBarApp класса CDlgBarApp объявлен как глобальный и создается сразу после запуска приложения.

В класс CDlgBarApp входит только метод InitInstance. Он создает главное окно приложения, представленное классом CDlgBarWindow, наследованным от класса CFrameWnd. Мы не станем подробно рассматривать этот метод, так как он фактически идентичен одноименному методу приложений Bar и MultiBar, представленных выше.

Класс главного окна приложения CDlgBarWindow

Класс 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()

};

Кроме ряда методов, в класс CDlgBarWindow входит элемент m_wndDialogBar класса CDialogBar. Этот элемент представляет диалоговую панель управления, которая будет отображаться в главном окне приложения.

Рассмотрим отдельные методы класса CDlgBarWindow более подробно.

Сейчас для нас наиболее важен метод OnCreate, который собственно, и создает диалоговую панель управления приложения DialogBar. В таблице сообщений класса CDlgBarWindow, находится макрокоманда ON_WM_CREATE. Поэтому в процессе создания главного окна приложения вызывается метод OnCreate.

Конструктор класса CDlgBarWindow

Конструктор класса CDlgBarWindow используется для создания главного окна приложения. Мы рассказывали о процедуре создания главного окна приложения в томе 24 серии “Библиотека системного программиста”, посвященном библиотеке MFC, поэтому сейчас не будем на нем останавливаться более подробно.

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

Таблица сообщений класса CDlgBarWindow обрабатывает сообщения от диалоговой панели управления. В ней также располагается макрокоманда ON_WM_CREATE, которая вызывает метод OnCreate во время создания окна:

ON_WM_CREATE()

Когда пользователь работает с диалоговой панелью управления, в ее родительское окно поступают сообщения. От кнопок Set и Clear и переключателя Alighn поступают командные сообщения, которые обрабатываются при помощи макрокоманд ON_COMMAND_EX:

// Командные сообщения от кнопок Set и Clear

ON_COMMAND_EX(IDC_BUTTON_SET, DlgBarCommand)

ON_COMMAND_EX(IDC_BUTTON_CLEAR, DlgBarCommand)

ON_COMMAND_EX(IDC_CHECK1, DlgBarCommand)


// Командные сообщения от переключателя Alighn

ON_COMMAND_EX(IDC_RADIO_LEFT, DlgBarCommand)

ON_COMMAND_EX(IDC_RADIO_CENTER, DlgBarCommand)

ON_COMMAND_EX(IDC_RADIO_RIGHT, DlgBarCommand)

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

От списка combo-box, расположенного в диалоговой панели управления, мы обрабатываем только одно сообщение с кодом извещения CBN_SELCHANGE. Это сообщение передается, когда пользователь выбирает из списка новую строку:

// Командные сообщения от списка combo-box

ON_CBN_SELCHANGE( IDC_COMBO_COLOUR, DlgBarCombo)

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

Метод OnCreate класса CDlgBarWindow сначала вызывает метод OnCreate базового класса CFrameWnd:

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


Затем мы создаем диалоговую панель управления. Для этого вызываем метод Create для объекта m_wndDialogBar, входящего в класс CDlgBarWindow, и представляющего панель управления:

 if (!m_wndDialogBar.Create(this, IDD_DIALOG_BAR, CBRS_TOP|CBRS_TOOLTIPS, IDD_DIALOG_BAR)) {

  TRACE0("Failed to create dialog barn");

  return -1;     

 }

 return 0;

}

В качестве родительского окна для диалоговой панели управления мы указываем главное окно приложения. Ключевое слово this представляет указатель на текущий объект, то есть, в данном случае, окно CDlgBarWindow.

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

В качестве третьего параметра метода Create мы привели стиль CBRS_TOP. Стиль CBRS_TOP устанавливает расположение диалоговой панели управления в верхней части окна приложения.

Метод DlgBarCombo класса CDlgBarWindow

Когда пользователь выбирает строку из списка combo-box в диалоговой панели управления, в ее родительское окно, которое в нашем случае является главным окном приложения, поступает сообщение. Для его обработки вызывается метод DlgBarCombo класса CDlgBarWindow.

Метод DlgBarCombo выводит на экран сообщение о том, что пользователь сделал выбор из списка combo-box:

void CDlgBarWindow::DlgBarCombo() {

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

 MessageBox("Combo-box selection changed");

}

Метод BarCommand класса CDlgBarWindow

Командные сообщения от кнопок Set, Clear, и переключателя Alighn обрабатываются методом BarCommand класса CDlgBarWindow. В качестве параметра nID методу BarCommand передается идентификатор вызвавшего его органа управления:

BOOL CDlgBarWindow::DlgBarCommand(UINT nID) {

 //…

}

В приложении мы определили для кнопок Set, Clear, и переключателей группы Alighn, описывающие их строковые ресурсы, которые имеют точно такие же идентификаторы. Поэтому когда вызывается метод DlgBarCommand и ему передается идентификатор кнопки или переключателя, мы загружаем строковый ресурс, который имеет точно такой же идентификатор и отображаем его на экране:

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*