Среда, 08.01.2025, 20:39
Главная Регистрация RSS поиск
Приветствую Вас, Гость
Меню сайта
Категории раздела
HTML [44]
Visual C++ и MFC [21]
c++ [78]
php [19]
Javascript [15]
C# [51]
загрузки [0]
XNA [10]
создание игр с помощью xna
Наш опрос
Каким языком программирования вы увлекаетесь
Всего ответов: 2420
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Главная » Статьи » Visual C++ и MFC

Class Wizard. Часть 2

В зрительном зале воцарилась тишина, все в ожидании продолжения первой кровавой части о похождениях Class Wizard. По предварительным данным сиквел не менее жесток и кровожаден, чем его предшественник. Люди, видевшие его утверждают, что Чужие-1 , 2, 3 и т. д. отдыхают при сравнении с ним. Занавес приоткрывается, начинается киносеанс.

Несмотря на столь красочное вступление ничего сложного не будет. Сегодня вашему вниманию будет представлена вторая вкладка Class Wizard под названием Member Variables.

Внеший вид 2-ой вкладки:

Вторая вкладка

Для того чтобы полноценно взаимодействовать с элементом управления ( имеется ввиду, например, получать значение из элемента управления, устанавливать его свойства программно) с ним необходимо связать переменную. Вот вы и подошли к тому, зачем нужна данная вкладка. Основное предназначение её - связывание элементов управления с переменными. Существует 2 вида связки: по значению и с помощью управляющей переменной.

  1. Связка по значению. При использовании этого вида в связанную переменную можно считывать значение элемента управления ( например, текст, введенный в текстовое поле). И наоборот из переменной можно записывать значение в элемент управления, связанный с ней. Для записи и чтения вам понадобится функция класса CWnd UpdateData.
  2. Связка с помощью управляющей переменной. Если вы выбрали данный тип, то тогда кроме того что вы можете читать значение элемента управления, писать значение в него, вы получаете возможность изменять свойства элемента программно ( т.е. с помощью функций ).

Почти с каждым элементом управления можно связать 2 переменные: одну по значению, другую, как программный объект.

На вкладке Member Variables есть следующие элементы:

  1. В выпадающем списке Project стоит имя активного проекта.
  2. В выпадающем списке Class Name содержатся все классы, которые есть в программе.
  3. В списке Control IDs содержатся ID элементов управления, связанных с текущим активным классом.

Для того чтобы связать например текстовое поле с переменной необходимо проделать следующие действия

  1. Выбрать название класса диалога в выпадающем списке Class name.
  2. Найти ID элемента управления в списке Control ID

    Вторая вкладка

  3. Нажать на кнопку Add variable.На экране появится окно выбора переменной. Добавление переменной
  4. В текстовом поле Member variable name необходимо ввести имя переменной. В списке Category нужно выбрать тип связи. По умолчанию стоит связка по значению - Value ( связка как программный объект - Control ). В списке Variable type нужно выбрать тип данных для переменой ( например CString или int ). Выберем тип связки как программный объект и введем имя.
    Связка, как программный объект


















  5. Наконец, нажмем на кнопку OK. А вот и результат работы:


Дополнение:

После того как вы связали переменную с элементом управления, у вас появляется возможность наложить ограничения на её свойства. Например как на рисунке:

У переменной m_str ( она связана с IDC_EDIT1 ) максимальное количество символов равно 23. Безусловно, вы можете проставить другое значение. Или ещё примерчик :

У переменной m_digit выставлено ограничение на минимальное и максимальное значение. Первое должно быть равно 0, второе 100.

Для обмена значениями между элементами управления и проверки корректности данных используется функция DoDataExchange класса CWnd.

virtual void DoDataExchange( CDataExchange* pDX );

Она реализует механизм DDX/DDV.

  1. DDX ( dialog data exchange ) отвечает за обмен значениями
  2. DDV ( dialog data validation ) за проверку корректности данных

При программировании в среде Visual C++ разработчику обычно нет необходимости непосредственно модифицировать код DoDataExchange. Это за него сделает Class Wizard.Для переменной m_str код функции, сгенерированной Class Wizard выглядит так

void CEditDlg::DoDataExchange(CDataExchange* pDX){
 CDialog ::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CEditDlg)
 DDX_Text(pDX, IDC_EDIT1, m_str);
 DDV_MaxChars(pDX, m_str, 23);
 //}}AFX_DATA_MAP
}

А для m_digit этот код выглядит следующим образом:

void CEditDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CEditDlg)
 DDX_Text(pDX, IDC_EDIT1, m_digit);
 DDV_MinMaxInt(pDX, m_digit, 0, 100);
 //}}AFX_DATA_MAP
}

Фактически вы получаете в подарок готовый инструмент по обмену данными и проверки корректности введеных значений.

Экскурсию в недра Class Wizard вы продолжите в недалеком будущем.

Категория: Visual C++ и MFC | Добавил: slava (26.09.2009)
Просмотров: 1621 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]