Приклад створення діалогового вікна в MS Visual Studio 2010 – C++ (MFC)
Умова задачі
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); // вивід повідомлення на екран }
Тепер можна запускати проект на виконання і протестувати його роботу.