Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекції_ІЗВП_укр.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
6 Мб
Скачать
☆

4. Додавання діалогу за допомогою класу

Ми розглянули створення діалогового вікна. При цьому ми не створювали новий клас. Подивимося тепер, як можна створити діалогове вікно з створенням нового класу.

Почнемо з того, що створимо ресурс для діалогового вікна. Для цього заходимо в меню Insert, далі вибираємо Resource. У діалозі вибираємо Dialog і натискаємо на New. Для того, щоб не сплутати наш діалог з попереднім, змініть його заголовок. Для цього клацніть на ньому правою кнопкою миші і виберіть Properties. У вікні властивостей змініть властивість Caption на Dialog (class):

Додавання діалогового вікна.

Закрийте вікно властивостей. Тепер використовуємо ClassWizard для створення нового класу. Для цього викличте для нашого нового діалогового вікна контекстне меню і виберіть у ньому ClassWizard. У вікні Adding a Class виберіть Create a new class і натисніть на OK:

З'явиться наступне діалогове вікно New Class. У ньому задайте властивість Name як CDlg і переконайтеся, що у випадному списку Dialog ID вибраний ідентифікатор нашого нового діалогового IDD_DIALOG2, після чого натисніть OK:

Після цього у вікні ClassWizard в списку класів з'явиться наш новий клас:

Тепер займемося необхідними змінами в коді. Їх кілька. По-перше, треба змінити обробник нашого меню. До цього в ньому викликалося перше діалогове вікно. Приберіть з обробника старий код та додайте код для появи нашого другого діалогового вікна:

void CMyMainWnd :: OnMyMenuDialog ()

{

CDlg dlg; dlg.DoModal ();

}

Так як ми використовуємо клас CDlg, то його заголовний файл треба додати в клас реалізації нашого класу CMyMainWnd (це файл, в якому ми написали обробник для меню):

# include <afxwin.h>

# include "resource.h"

# include "Dlg.h" ...

Тепер, якщо ви запустите нашу програму і виберете відповідне меню, то з'явиться наше нове діалогове вікно:

5. Обмін даними з діалогом

У цьому уроці ми з вами подивимося як, використовуючи ClassWizard, проводити обмін даних між програмою і діалоговим вікном. Наша програма буде передавати рядок з діалогового вікна в своє головне вікно і назад. Передана рядок буде з'являтися у заголовку нашого застосування.

Додайте на наше діалогове вікно Edit:

Для того, щоб передавати дані в діалог і назад, нам треба завести дві змінні - одну в класі діалогового вікна, а іншу - у віконному класі CMyMainWnd. Спочатку заведемо змінну в класі діалогового вікна. Для цього викликаємо ClassWizard, переходимо в ньому на вкладку Member Variables, у випадному списку Class name вибираємо клас нашого діалогового вікна CDlg, потім виділяємо ідентифікатор IDC_EDIT1 (це ідентифікатор Edit'а, який ми додали в наш діалог), і, нарешті, натискаємо на кнопку Add Variable:

Народитися вікно Add Member Variable. У ньому задайте m_sMyString в якості імені для нової змінної (і переконайтеся, що для ComboBox'а Variable type варто тип CString):

Натисніть OK. Додана нами змінна здасться в ClassWizard:

Крім того вона здасться в класі CDlg на вкладці ClassView:

Тепер додамо змінну у віконний клас:

class CMyMainWnd: public CFrameWnd

{

...

public: CString m_sMyString;

...

Тепер залишилося переписати код для нашого меню. Він повинен виглядати так:

void CMyMainWnd :: OnMyMenuDialog ()

{

CDlg dlg;

dlg.m_sMyString = m_sMyString; / / Передаємо дані в діалог

if (dlg.DoModal () == IDCANCEL) / / Якщо натиснули на cancel,

return; / / то виходимо

m_sMyString = dlg.m_sMyString; / / Передаємо дані і діалогу

SetWindowText (m_sMyString); / / Новий заголовок для вікна

}

Запускаємо програму і викликаємо наше діалогове вікно. Задаємо в ньому новий рядок:

Натискаємо на кнопку OK. Введений рядок здасться в заголовку нашої програми:

Також зверніть увагу, що при повторному виклику діалогу в ньому знову здасться наша рядок.

КОНТРОЛЬНІ ЗАПИТАННЯ

1. Назвіть послідовність етапів Створення меню?

2. Як Створити обробник меню, якими способами Це можна здійснити?

3. Назвіть послідовність етапів створення діалогового вікна?