002 — Пример создания и вызова диалогового окна в MS Visual Studio 2010 — C++

Пример создания диалогового окна в MS Visual Studio 2010 — C++ (MFC)


Содержание


Условие задачи

1. Разработать диалоговое окно, которое содержит две кнопки OK и Cancel (рис. 1).

Visual C++. Шаблон MFC Application. Форма, которую нужно создать

Рис. 1. Форма, которую нужно создать

2. Осуществить вызов диалогового окна из основного окна приложения. Вывести соответствующее сообщение, если в диалоговом окне нажатая одна из двух клавиш: OK и Cancel.


Выполнение

1. Запустить MS Visual Studio 2010

 

2. Создать проект на C++ по шаблону Dialog Based Application

Подробный пример создания проекта по шаблону Dialog Based Application описывается здесь.

В окне создания нового проекта задать имя приложения как MFCApp. В будущем будем привязываться к этому имени.

Папка приложения в нашем случае (не важно):

E:\Programs\CPP\Train-04

Во время создания нового проекта в мастере выбираем Dialog Based Application. Все другие настройки оставляем по умолчанию.

В результате будут сгенерированы два класса с именами CMFCAppApp и CMFCAppDlg.

Окно MS Visual Studio после выполненных действий будет иметь вид как показано на рисунке 2.

C++. Шаблон MFC Application. Форма приложения после создания Dialog Based Application

Рис. 2. Форма приложения после создания Dialog Based Application

 

3. Изменение внешнего вида главной формы

Осуществим удаление кнопки OK. А кнопку Cancel переименуем в Exit.

Для удаления кнопки OK нужно сначала ее выделить, а потом нажать клавишу Delete.

Таким самым образом удаляем элемент в котором написано:

"TODO: Place dialog controls here."

Чтобы переименовать кнопку Cancel, сначала выделим ее, а потом в окне Properties в свойстве Caption набираем слово «Exit» (рис. 3). Таким образом, приложение уже настроено на нажатие на кнопку «Exit» таким образом, что происходит выход из приложения.

C++. Шаблон MFC Application. Переименование имени кнопки с "Cancel" на "Exit"

Рис. 3. Переименование имени кнопки с «Cancel» на «Exit«

Пока что, в окне панели Properties имеем два элемента:

  • IDD_MFCAPP_DIALOG – главное окно приложения;
  • IDCANCEL – кнопка «Exit» (бывшая «Cancel«).

Можно загрузить приложение на выполнение и протестовать его работу.

Выносим на форму другую кнопку, не привязанную к обработчикам событий. В окне панели Properties появляется еще один элемент IDC_BUTTON1.

Форма приложения будет иметь вид, как показано на рисунке 4.

Visual C++. Шаблон MFC Application. Вынесение кнопки не привязанной к обработчику событий

Рис. 4. Вынесение кнопки не привязанной к обработчику событий

Свойство Caption кнопки IDC_BUTTON1 изменяем на Form2. После нажатия на этой кнопке будет вызываться диалоговое окно.

 

4. Этапы построения диалогового окна

В Visual C++ любое диалоговое окно строится в три этапа:

  • формирование ресурсов диалогового окна;
  • создание класса диалогового окна;
  • использование класса диалогового окна.

 



5. Формирование класса и ресурсов диалогового окна

В MS Visual Studio ресурсы диалогового окна автоматически создаются после создания класса окна. Таким образом, создав класс окна, мы автоматически создаем ресурс окна.

Для работы с классами используется мастер классов Class Wizard. Чтобы вызвать Class Wizard делаем клик правой кнопкой мышки и в контекстном меню выбираем команду «Class Wizard…» (Рис. 5).

Visual C++. Шаблон MFC Application. Вызов "Class Wizard..." для создания класса и ресурса диалогового окна

Рис. 5. Вызов «Class Wizard…» для создания класса и ресурса диалогового окна

В результате откроется окно, которое изображено на рисунке 6.

Visual C++. Шаблон MFC Application. Окно "MFC Class Wizard"

Рис. 6. Окно «MFC Class Wizard«

Окно имеет такие поля:

1. Поле «Project:» – имеющиеся проекты в решении (Solution).

2. Поле «Class Name:» указывает имеющиеся классы в проекте. В нашем случае есть три класса с именами:

  • CMFCAppApp – класс приложения в целом;
  • CMFCAppDlg – класс диалогового окна приложения;
  • CAboutDlg – класс диалогового окна About, что было сформировано при создании проекта мастером AppWizard.

3. Поле «Base Class:» указывает на базовый класс, из которого унаследован класс, который отображается в поле «Class Name:«.

4. Поле «Resource:» определяет название ресурса, который отвечает классу из поля «Class Name:«.

5. Поле «Class declaration:» определяет название файла-заголовка для класса, который отображается в поле «Class Name:«.

6. Поле «Class implementation:» определяет название файла, в котором реализованы функции из класса, который отображается в поле «Class Name:«.

Также окно имеет пять вкладок, которые для класса из поля «Class Name:» описывают:

  • команды из карты сообщений;
  • сообщения Windows, которые генерируются в классе и могут обрабатываться;
  • виртуальные функции;
  • внутренние переменные, описанные в классе;
  • методы, имеющиеся в классе.

Чтобы добавить новый класс, вызовем команду «Add Class» (рис. 7).

Visual C++. Шаблон MFC Application. Команда добавления нового класса

Рис. 7. Команда добавления нового класса

В результате откроется окно «MFC Add Class Wizard«, в котором устанавливаем поля в значения, как изображено на рисунке 8. Для установления полей, достаточно в поле «Class Name:» набрать текст «CForm2«. Автоматически будут заполнены все другие поля за исключением поля «Base class:«.

В поле «Base class:» указывается базовый класс CDialog.

Название ресурса устанавливается как IDD_FORM2.

Заголовочный файл и файл реализации класса имеют названия «Form2.h» и «Form2.cpp«.

Visual C++. MFC Applicaiton. Создание нового класса CForm2 и ресурса IDD_FORM2, которые базируются на классе CDialog

Рис. 8. Создание нового класса CForm2 и ресурса IDD_FORM2, которые базируются на классе CDialog

Делаем клик на «Finish«. В предшествующем окне видно, что к трем предшествующим классам добавлен класс CForm2.

Снова делаем клик на «OK«.

 

6. Окно MS Visual Studio и панель Solution Explorer

После выполненных действий, окно панели Solution Explorer имеет вид, как показано на рисунке 9.

Visual C++. Шаблон MFC Application. Окно Solution Explorer

Рис. 9. Окно Solution Explorer

Как видно из рисунка 9, в списке заголовочных файлов появились файлы «Form2.h» и «Form2.cpp«. Соответственно, это являются файлы заголовка и реализации для новообразованного класса CForm2.

 

7. Вызов диалогового окна класса CForm2 как ресурса

Чтобы начать формировать новое диалоговое окно (класс CForm2), нужно вызвать его как ресурс. Для этого в Solution Explorer делаем двойной клик мышкой на файле «MFCApp.rc» из вкладыша Resources (рис. 10).

Visual C++. Шаблон MFC Application. Вызов списка имен ресурсов приложения

Рис. 10. Вызов списка имен ресурсов приложения

Получаем список имен имеющихся ресурсов:

  • IDD_ABOUTBOX – ресурс диалогового окна About;
  • IDD_FORM2 – ресурс новосозданного окна;
  • IDD_MFC_APP_DIALOG – ресурс главного окна приложения.

Для вызова нужного ресурса, необходимо на нем сделать двойной клик мышкой. Делаем двойной клик на ресурсе IDD_FORM2. В результате, откроется новосозданное диалоговое окно (рис. 11). Как видно из рисунка 11, оно похоже на начальное окно приложения типа Dialog Based Application.

Visual C++. Шаблон MFC Applicaiton. Окно класса CForm2, который унаследован от класса CDialog

Рис. 11. Окно класса CForm2, который унаследован от класса CDialog

Можно изменить размеры формы и размещение кнопок «OK» и «Cancel«.

 

8. Программирование события клика на кнопке «Form2» главного окна приложения

Используя «Solution Explorer» и файл ресурсов «MFCApp.rc» (см. п. 7) переходим к ресурсу IDD_MFCAPP_DIALOG главного окна приложения (рис. 12).

Visual C++. Шаблон MFC Application. Главное окно приложения

Рис. 12. Главное окно приложения

В окне «Properties» выделяем кнопку с идентификатором IDC_BUTTON1. Потом переходим на вкладыш «Control Events» (рис. 13).

Visual C++. Шаблон MFC Application. Список событий из вкладыша Control Events элемента управления IDC_BUTTON1

Рис. 13. Список событий из вкладыша Control Events элемента управления IDC_BUTTON1

В списке событий находим событие с названием BN_CLICKED. Потом выбираем кнопку выбора нисходящего меню и в меню выбираем «<Add> OnBnClickedButton1» (рис. 14).

Visual C++. Шаблон MFC Application. Выбор события BN_CLICKED и вызов обработчика события OnBnClickedButton1

Рис. 14. Выбор события BN_CLICKED и вызов обработчика события OnBnClickedButton1

В результате откроется окно файла «MFCAppDlg.cpp» с выделенным фрагментом кода обработчика события OnBnClickedButton1.

void CMFCAppDlg::OnBnClickedButton1()
{
  // TODO: Add your control notification handler code here
}

Между скобками { } нужно вставить свой собственный код обработки события.

Программный код функции обработки события клика на кнопке IDC_BUTTON1 следующий:

void CMFCAppDlg::OnBnClickedButton1()
{
  // TODO: Add your control notification handler code here
  CForm2 dlg; // создание объекта типа "диалоговое окно"
  CString res_msg; // описание дополнительной переменной для вывода результата
 
  if (dlg.DoModal()==IDOK) // DoModal() - функция открытия окна
  {
    res_msg = "Return from Form2 is OK";
  }
  else
  {
    res_msg = "Return from Form2 is Cancel";
  }

  AfxMessageBox(res_msg); // вывод сообщения на экран
}

Теперь можно запустить приложение на выполнение и протестировать его работу.

 


Связанные темы