Пример создания диалогового окна в MS Visual Studio 2010 — C++ (MFC)
Содержание
- Условие задачи
- Выполнение
- 1. Запустить MS Visual Studio 2010
- 2. Создать проект на C++ по шаблону Dialog Based Application
- 3. Изменение внешнего вида главной формы
- 4. Этапы построения диалогового окна
- 5. Формирование класса и ресурсов диалогового окна
- 6. Окно MS Visual Studio и панель Solution Explorer
- 7. Вызов диалогового окна класса CForm2 как ресурса
- 8. Программирование события клика на кнопке «Form2» главного окна приложения
- Связанные темы
Поиск на других ресурсах:
Условие задачи
1. Разработать диалоговое окно, которое содержит две кнопки OK и Cancel (рис. 1).
Рис. 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.
Рис. 2. Форма приложения после создания Dialog Based Application
⇑
3. Изменение внешнего вида главной формы
Осуществим удаление кнопки OK. А кнопку Cancel переименуем в Exit.
Для удаления кнопки OK нужно сначала ее выделить, а потом нажать клавишу Delete.
Таким самым образом удаляем элемент в котором написано:
"TODO: Place dialog controls here."
Чтобы переименовать кнопку Cancel, сначала выделим ее, а потом в окне Properties в свойстве Caption набираем слово «Exit» (рис. 3). Таким образом, приложение уже настроено на нажатие на кнопку «Exit» таким образом, что происходит выход из приложения.
Рис. 3. Переименование имени кнопки с «Cancel» на «Exit«
Пока что, в окне панели Properties имеем два элемента:
- IDD_MFCAPP_DIALOG – главное окно приложения;
- IDCANCEL – кнопка «Exit» (бывшая «Cancel«).
Можно загрузить приложение на выполнение и протестовать его работу.
Выносим на форму другую кнопку, не привязанную к обработчикам событий. В окне панели Properties появляется еще один элемент IDC_BUTTON1.
Форма приложения будет иметь вид, как показано на рисунке 4.
Рис. 4. Вынесение кнопки не привязанной к обработчику событий
Свойство Caption кнопки IDC_BUTTON1 изменяем на Form2. После нажатия на этой кнопке будет вызываться диалоговое окно.
⇑
4. Этапы построения диалогового окна
В Visual C++ любое диалоговое окно строится в три этапа:
- формирование ресурсов диалогового окна;
- создание класса диалогового окна;
- использование класса диалогового окна.
⇑
5. Формирование класса и ресурсов диалогового окна
В MS Visual Studio ресурсы диалогового окна автоматически создаются после создания класса окна. Таким образом, создав класс окна, мы автоматически создаем ресурс окна.
Для работы с классами используется мастер классов Class Wizard. Чтобы вызвать Class Wizard делаем клик правой кнопкой мышки и в контекстном меню выбираем команду «Class Wizard…» (Рис. 5).
Рис. 5. Вызов «Class Wizard…» для создания класса и ресурса диалогового окна
В результате откроется окно, которое изображено на рисунке 6.
Рис. 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).
Рис. 7. Команда добавления нового класса
В результате откроется окно «MFC Add Class Wizard«, в котором устанавливаем поля в значения, как изображено на рисунке 8. Для установления полей, достаточно в поле «Class Name:» набрать текст «CForm2«. Автоматически будут заполнены все другие поля за исключением поля «Base class:«.
В поле «Base class:» указывается базовый класс CDialog.
Название ресурса устанавливается как IDD_FORM2.
Заголовочный файл и файл реализации класса имеют названия «Form2.h» и «Form2.cpp«.
Рис. 8. Создание нового класса CForm2 и ресурса IDD_FORM2, которые базируются на классе CDialog
Делаем клик на «Finish«. В предшествующем окне видно, что к трем предшествующим классам добавлен класс CForm2.
Снова делаем клик на «OK«.
⇑
6. Окно MS Visual Studio и панель Solution Explorer
После выполненных действий, окно панели Solution Explorer имеет вид, как показано на рисунке 9.
Рис. 9. Окно Solution Explorer
Как видно из рисунка 9, в списке заголовочных файлов появились файлы «Form2.h» и «Form2.cpp«. Соответственно, это являются файлы заголовка и реализации для новообразованного класса CForm2.
⇑
7. Вызов диалогового окна класса CForm2 как ресурса
Чтобы начать формировать новое диалоговое окно (класс CForm2), нужно вызвать его как ресурс. Для этого в Solution Explorer делаем двойной клик мышкой на файле «MFCApp.rc» из вкладыша Resources (рис. 10).
Рис. 10. Вызов списка имен ресурсов приложения
Получаем список имен имеющихся ресурсов:
- IDD_ABOUTBOX – ресурс диалогового окна About;
- IDD_FORM2 – ресурс новосозданного окна;
- IDD_MFC_APP_DIALOG – ресурс главного окна приложения.
Для вызова нужного ресурса, необходимо на нем сделать двойной клик мышкой. Делаем двойной клик на ресурсе IDD_FORM2. В результате, откроется новосозданное диалоговое окно (рис. 11). Как видно из рисунка 11, оно похоже на начальное окно приложения типа Dialog Based Application.
Рис. 11. Окно класса CForm2, который унаследован от класса CDialog
Можно изменить размеры формы и размещение кнопок «OK» и «Cancel«.
⇑
8. Программирование события клика на кнопке «Form2» главного окна приложения
Используя «Solution Explorer» и файл ресурсов «MFCApp.rc» (см. п. 7) переходим к ресурсу IDD_MFCAPP_DIALOG главного окна приложения (рис. 12).
Рис. 12. Главное окно приложения
В окне «Properties» выделяем кнопку с идентификатором IDC_BUTTON1. Потом переходим на вкладыш «Control Events» (рис. 13).
Рис. 13. Список событий из вкладыша Control Events элемента управления IDC_BUTTON1
В списке событий находим событие с названием BN_CLICKED. Потом выбираем кнопку выбора нисходящего меню и в меню выбираем «<Add> OnBnClickedButton1» (рис. 14).
Рис. 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); // вывод сообщения на экран }
Теперь можно запустить приложение на выполнение и протестировать его работу.
⇑
Связанные темы
- Delphi. Создание новой формы и подключение ее к главной форме программы
- Пример создания и вызова новой формы приложения в C#
- C++ Builder. Пример создания и вызова новой формы из главной формы приложения