002 – Приклад створення діалогового вікна в MS Visual Studio 2010 – C++

Приклад створення діалогового вікна в MS Visual Studio 2010 – C++ (MFC)

Умова задачі

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

05_02_00_002_01_

Рис. 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.

05_02_00_002_02_

Рис. 2. Форма додатку після створення Dialog Based Application

 

3. Зміна зовнішнього вигляду головної форми.

Здійснимо видалення кнопки OK. А кнопку Cancel перейменуємо в Exit.

Для видалення кнопки OK потрібно спочатку її виділити, а потім натиснути клавішу Delete.

Таким самим чином видаляємо елемент в якому написано:

"TODO: Place dialog controls here."

Щоб перейменувати кнопку Cancel спочатку виділяємо її, а потім у вікні Properties у властивості Caption набираємо слово “Exit” (рис. 3). Таким чином, додаток вже налаштований на натиск на кнопці “Exit” таким чином, що відбувається вихід з додатку.

05_02_00_002_03_

Рис. 3. Перейменування кнопки Cancel на Exit

Поки що, у вікні панелі Properties маємо два елементи:
IDD_MFCAPP_DIALOG – головне вікно додатку;
IDCANCEL – кнопка “Exit” (колишня “Cancel“).

Можна завантажити додаток на виконання і протестувати його роботу.

Виносимо на форму іншу кнопку, не прив’язану до обробників подій. У вікні панелі Properties з’являється ще один елемент IDC_BUTTON1.

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

05_02_00_002_04_

Рис. 4. Винесення кнопки не прив’язаної до обробника подій

Властивість Caption кнопки IDC_BUTTON1 змінюємо на Form2.

Після натиску на цій кнопці буде викликатись діалогове вікно, яке буде створене.

 

4. Етапи побудови діалогового вікна.

У Visual C++ будь-яке діалогове вікно будується в три етапи:
– формування ресурсів діалогового вікна;
– створення класу діалогового вікна;
– використання класу діалогового вікна.



 

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

У MS Visual Studio ресурси діалогового вікна автоматично додаються після створення класу вікна.

Для роботи з класами використовується майстер класів Class Wizard. Щоб викликати Class Wizard робимо клік правою кнопкою мишки і в контекстному меню вибираємо команду “Class Wizard…” (Рис. 5).

05_02_00_002_05_

Рис. 5. Виклик “Class Wizard…” для створення класу і ресурсу діалогового вікна

У результаті відкриється вікно, що зображене на рисунку 6.

05_02_00_002_06_

Рис. 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).

05_02_00_002_07_

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

У результаті відкриється вікно “MFC Add Class Wizard“, в якому встановлюємо поля у значення, як зображено на рисунку 8. Для встановлення полів, достатньо у полі “Class Name:” набрати текст “CForm2“. Автоматично будуть заповнені усі інші поля за винятком поля “Base class:“.

У полі “Base class:” вказується базовий клас CDialog.

Назва ресурсу встановлюється як IDD_FORM2.

Заголовочний файл та файл реалізації класу мають назви “Form2.h” та “Form2.cpp“.

05_02_00_002_08_

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

Робимо клік на “Finish“. У попередньому вікні видно, що до трьох попередніх класів додано клас CForm2.

Знову робимо клік на “OK“.

 

6. Вікно MS Visual Studio та панель Solution Explorer.

Після виконаних дій, вікно панелі Solution Explorer має вигляд, як показано на рисунку 9.

05_02_00_002_09_

Рис. 9. Вікно Solution Explorer

Як видно з рисунку 9, у списку заголовочних файлів з’явилися файли “Form2.h” та “Form2.cpp“. Відповідно, це є файли заголовку та реалізації для новоствореного класу CForm2.

 

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

Щоб почати формувати новостворене діалогове вікно (клас CForm2), потрібно викликати його як ресурс. Для цього в Solution Explorer робимо подвійний клік мишкою на файлі “MFCApp.rc” з вкладки Resources (рис. 10).

05_02_00_002_10_

Рис. 10. Виклик списку файлів ресурсів додатку

Отримуємо список імен наявних ресурсів:
IDD_ABOUTBOX – ресурс діалогового вікна About;
IDD_FORM2 – ресурс новоствореного вікна;
IDD_MFC_APP_DIALOG – ресурс головного вікна додатку.

Для виклику потрібного ресурсу, необхідно на ньому зробити подвійний клік мишкою. Робимо подвійний клік на ресурсі IDD_FORM2. У результаті, відкриється новостворене діалогове вікно (рис. 11). Як видно з рисунку 11, воно схоже на початкове вікно додатку типу Dialog Based Application.

05_02_00_002_11_

Рис. 11. Вікно класу CForm2, що успадкований від класу CDialog

Можна змінити розміри форми та розміщення кнопок “OK” та “Cancel” вікна.

 

8. Програмування події кліку на кнопці “Form2” головного вікна програми.

Використовуючи “Solution Explorer” та файл ресурсів “MFCApp.rc” (див. п. 7) переходимо до ресурсу IDD_MFCAPP_DIALOG головного вікна додатку (рис. 12).

05_02_00_002_12_

Рис. 12. Головне вікно додатку

У вікні “Properties” виділяємо кнопку з ідентифікатором IDC_BUTTON1. Потім переходимо на вкладку “Control Events” (рис. 13).

05_02_00_002_13_

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

У списку подій знаходимо подію з назвою BN_CLICKED. Потім вибираємо кнопку вибору спадного меню і в меню вибираємо “<Add> OnBnClickedButton1” (рис. 14).

05_02_00_002_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); // вивід повідомлення на екран
}

Тепер можна запускати проект на виконання і протестувати його роботу.