Студопедия

КАТЕГОРИИ:

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

Добавление элементов в диалоговое окно




Чтобы добавить новый элемент, перетащите его из палитры в конструируемое окно. Нам нужны кнопка и текстовое поле. Установите указатель мыши над требуемым инструментом в палитре (кнопка - третья сверху в правом столбце палитры, текстовое поле находится непосредственно над ней), нажмите кнопку мыши и перетащите управляющий элемент в окно диалога.

ПОДСКАЗКА:Если вы захотите узнать, какой элемент представлен тем или иным инструментом в палитре, ненадолго задержите над ним указатель мыши — на экране появится подсказка с названием элемента.

Щелкните в текстовом поле — вокруг него появится заштрихованная рамка с маленькими квадратиками, которые называютсямаркерами размеров. Вы можете захватить мышью любой маркер и "растянуть" элемент так, как считаете нужным. Мы растягиваем текстовое поле по горизонтали (обратите внимание: указатель мыши приобретает вид двойной стрелки).

Итак, у нас есть текстовое поле и кнопка с надписью 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.

Метод Назначение
Cdialog Конструирует объект Cdialog
Create Инициализирует объект Cdialog
Createindirect Создает немодальное диалоговое окно по шаблону, находящемуся в памяти
DoModal Вызывает модальное диалоговое окно и завершает работу после его закрытия
EndDialog Закрывает модальное диалоговое окно
GetDefID Получает идентификатор кнопки, используемой по умолчанию
GoToDlgCtrl Передает фокус определенному управляющему элементу диалогового окна
IhitModalIndirect Создает модальное диалоговое окно по шаблону, находящемуся в памяти; параметры сохраняются до вызова DoModal()
MapDialogRect Преобразует координаты в единицах диалогового окна в экранные
NextDlgCtrl Передает фокус следующему управляющему элементу диалогового окна
OnCancel Переопределяется для обработки кнопки Cancel или клавиши Esc
OnInitDialog Переопределяется для проведения дополнительной инициализации диалогового окна
OnOK Переопределяется для обработки кнопки ОК в модальном диалоговом окне
OnSetFont Переопределяется для задания шрифта, используемого элементом диалогового окна при отображении текста
PrevDlgCtrl Передает фокус предыдущему управляющему элементу диалогового окна
SetDefID Назначает кнопку диалогового окна, используемой по умолчанию
SetHelpID Задает идентификатор контекстной справки

При нажатии кнопки ОК снова появляется окно 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 не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...