Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Связывание переменных с элементами диалоговых окон
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; просмотров: 356. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |