Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Связывание переменных с элементами диалоговых окон  




ClassWizard поможет нам связать переменные класса с элементами диалогового окна. Запустите ClassWizard и перейдите на вкладкуMember Variables. Убедитесь, что в полеClass name выбран класс диалогового окна Dlg, затем выделите идентификатор текстового поля IDC_EDIT1 и нажмите кнопку Add Variable

Открывается окноAdd Member Variable. В нем мы присвоим имя переменной для хранения содержимого текстового поля. Занесите в поле Member variable name строку m_text и проследите, чтобы в списке Categoryбыл выбран пункт Value, а в списке Variable type — CString. Таким образом, мы связываем содержимое текстового поля и переменную класса CStrins с именем m_text.

ПОДСКАЗКА: Вы можете присвоить имя всему управляющему элементу, а не только его отдельному свойству(свойством называется атрибут элемента, например строка, хранящаяся в текстовом поле). В следующем примере мы увидим, как это делается.  

Закройте окно Add Member Variableкнопкой OKи вернитесь в ClassWizard. Как видно, в перечне идентификаторов появилась новая переменная, m_text.

Переменная для работы с текстовым полем готова. Теперь мы можем задать содержимое текстового поля в методе OnButton1()(который вызывается при нажатии кнопкиНажми меня):

void Dig::OnButton1()

{

         m_text = "Текст в диалоговом окне";

}

Впрочем, это еще не все — простое присвоение переменной m_textеще не заставит текст появиться в диалоговом окне. Обмен информацией между переменной и элементом IDC_EDIT1осуществляется в специальном методе, включенном ClassWizard в класс диалогового окна:

void Dig::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(Dlg)

DDX_Text(pDX, IDC_EDIT1, m_text);

//}}AFX_DATA_MAP }

Остается лишь проследить за своевременным обновлением текстового поля. Для этого следует вызвать метод UpdateData():

void Dig::OnButton1() {

m_text = "Текст в диалоговом окне";

UpdateData(false);

Вызов этого метода с параметром falseзаносит в текстовое поле значение переменной m_text. Вызов с параметром trueприсваивает переменной m_text содержимое текстового поля: 

UpdateData(false) означает: IDC_EDIT = m_text;  

 UpdateData(true) означает: m_text = IDC_EDIT;   

ВНИМАНИЕ: При использовании переменных для работы с элементами диалогового окна сложнее всего вспомнить о необходимости вызвать UpdateData() для чтения или записи содержимого элемента. Если при изменении переменной в диалоговом окне ничего не происходит, проверьте, не забыли ли вы вызвать этот метод.

Наша строка благополучно перенесена в текстовое поле, однако пользователь желает отредактировать ее перед нажатием кнопки ОК. Мы хотим вывести в клиентской области текущее содержимое текстового поля, поэтому перед закрытием диалогового окна необходимо занести в m_text текущее содержимое текстовое поля. Давайте сделаем это.  

Переопределение метода для кнопки ОК

Методдля кнопки ОК добавляется точно также, как и для любой другой кнопки. Воспользуйтесь ClassWizard и свяжите метод ОnОК()с кнопкой ОК, идентификаторкоторой равен IDOK:

void Dlg::OnOK()

{

// ТООО: добавьте дополнительную проверку

CDialog::ОnОК();

}

Обратите внимание на вызов метода CDialog:: ОпОК() — он закрывает диалоговоеокно и возвращает значениеIDOK. Мы хотим занести в переменную m_text содержимое текстового поля, для чего следует вызвать UpdateData() со значением true:

void Dlg::OnOK()

{

// TODO: добавьте дополнительную проверку

  UpdateData(true);

CDialog::OnOK();

}   

Если пользователь изменит содержимое текстового поля, мы сможем вывесить клиентской области текст, находившийся в нем в момент нажатия кнопки ОК.

Интерфейс диалогового окна Dlg готов, осталось лишь отобразить окно на экране. Давайте посмотрим, как это делается.










Последнее изменение этой страницы: 2018-04-12; просмотров: 317.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...