Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Добавление элементов в диалоговое окно
Чтобы добавить новый элемент, перетащите его из палитры в конструируемое окно. Нам нужны кнопка и текстовое поле. Установите указатель мыши над требуемым инструментом в палитре (кнопка - третья сверху в правом столбце палитры, текстовое поле находится непосредственно над ней), нажмите кнопку мыши и перетащите управляющий элемент в окно диалога. ПОДСКАЗКА:Если вы захотите узнать, какой элемент представлен тем или иным инструментом в палитре, ненадолго задержите над ним указатель мыши — на экране появится подсказка с названием элемента. Щелкните в текстовом поле — вокруг него появится заштрихованная рамка с маленькими квадратиками, которые называютсямаркерами размеров. Вы можете захватить мышью любой маркер и "растянуть" элемент так, как считаете нужным. Мы растягиваем текстовое поле по горизонтали (обратите внимание: указатель мыши приобретает вид двойной стрелки). Итак, у нас есть текстовое поле и кнопка с надписью Button1. Мы хотим заменить эту надпись другой, "Нажни меня" — давайте сделаем это. Изменение надписей Чтобы изменить надпись элемента, выделите его щелчком мыши и введите новую надпись. В случае нашей кнопки открывается окно Push Button Properties. Введите в поле Captionтекст Нажми меня. Также обратите внимание на идентификатор, присвоенный кнопке редактором диалоговых окон: IDC_BU1TON1. Аналогично, текстовому полю по умолчанию присваивается идентификаторIDC_EDIT1. С этим диалоговым окном мы будем работать в программе. Но как это сделать? В данный момент оно представляет собой ресурс, который хранится в файле dialogs.rcи выглядит следующим образом: IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186. 95 STYLE DS_MODALFRAME | WSJWUP | WS.CAPTION | WS.SYSMENU CAPTION "Dialog" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,129,7,50.14 PUSHBUTTON "Cancel",IDCANCEL,129,24,50,14 EDITTEXT IDC_EDIT1,75.52,91,14,ES.AUTOHSCROLL PUSHBUTTON "Нажми меня",IDC_BUTTON1,21,53,50,14 END Нам придется создать объект, который был бы связан с данным ресурсом, для которого можно вызывать методы диалоговых окон, такие как DoModal(). Чаще всего диалоговые окна включаются в программу именно так — после графического проектирования они связываются с классом. Давайте создадим такой класс. Создание класса диалогового окна Для создания нового класса диалогового окна нам понадобится ClassWizard. 3апустите его и нажмите кнопку Add Class, затем выберите из раскрывающегося меню строку New— открывается окно New Class. Введите в поле Nameтекст Dlg(имя класса), затем выберите из списка Base Class его базовый класс CDialog. Класс CDialogв MFC является базовым для диалоговых окон. Его методы перечислены в табл. 6.1. Нажмите кнопку ОК в окнеNew Class. Таблица 6.1.
При нажатии кнопки ОК снова появляется окно ClassWizard. Проследите, чтобы в списке Class name был выбран класс Dlg. В окне перечислены идентификаторы всех управляющих элементов нашего диалогового окна: IDC_BUTTON1, IDC_EDIT1, ID_OK (кнопка ОК) и ID_CANCEL (кнопка Cancel). Теперь мы должны связать с кнопкой код Visual C++. Связывание методов с элементами диалоговых окон При нажатии кнопки Нажми меня в текстовом поле должна появляться строка "Текст в диалоговом окне". Прежде всего, необходимо каким-то образом определить момент нажатия кнопки. При помощи ClassWizard мы свяжем обработчик сообщением от данной кнопки. Выберите из списка в окне ClassWizard строку IDC_BUTTON1 и дважды щелкните на строке BN_CLICKEDв списке Messages. Она соответствует специальному сообщению, которое посылается нажатой кнопкой (BN означает "button", то есть "кнопка"). Другое сообщение,BN_DOUBLECLICKED, посылается кнопкой при двойном щелчке на ней. Когда вы дважды щелкнете на строке BN_CLICKED, ClassWizard предложитприсвоить создаваемому обработчику имяOnButtont1(). Завершите создание OnButton1() нажатием кнопки ОК. Перейдите к коду обработчика: void Dlg::OnButton1() { // TODO: добавьте код для обработки оповещений от элемента } Этот метод будет вызываться программой при нажатии вдиалоговом окне кнопки "Нажми меня". Мы сделали немало: спроектировали диалоговое окно и разместили в нем нужные элементы, настроили параметры этих элементов, связали диалоговое окно с классом и подключили метод для обработки сообщений от кнопки. Тем не менее, мы должны научиться работать с содержимым текстового поля, поскольку при нажатии кнопки в нем должна появляться наша строка. Как это сделать? Ведь текстовое поле — это всего лишь фрагмент описания из файла dialogs.rc: IDD_DIALOG1 DIALOG DISCARDABLE 0, 0. 186, 95 STYLE OS.MODALFRAME | WS.POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Dialog" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,129,7,50,14 PUSHBUTTON "Cancel",IDCANCEL.129,24,50,14 EDITTEXT IDC_EDIT1,75.52,91,14.ES.AUTOHSCROLL PUSHBUTTON "Нажми меня",IDC_BUTTON1,21.53.50,14 END Необходимо найти такой способ работы с текстовым полем, который позволил бы добавить в него наш текст. Visual C++ позволяет связывать переменные класса с элементами диалоговых окон; именно этой возможностью мы сейчас и воспользуемся. Такой подход позволяет создать переменную m_textдля хранения содержимого текстового поля, так что при нажатии кнопки "Нажми меня"останется лишь присвоить переменной нужное значение: m_text = "Текст в диалоговом окне" Такая методика обладает широкими возможностями. Давайте подробнее рассмотрим, как она работает. |
||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2018-04-12; просмотров: 444. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |