Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Отображение диалогового окна
На экране диалоговое окно должно появляться при выборе команды File > Show Dialog....Данная команда связана с методом OnFileShowdialog()класса вида: void CDialogsView::OnFileShowdlalog() { // ТООО: добавьте код обработки команды } В этом методе мы создадим новый объект класса Dlgи отобразим его, пользуясь методомDoModal(). Однако перед тем, как делать это, необходимо сообщить классу вида о существовании класса Dlg. Это может показаться довольно странным: Разве класс Dlgне принадлежит тому же проекту, что и класс вида? Да, это действительно так, однако поддержка класса Dlgреализована в отдельном файле, Dlg.cpp. Чтобы класс вида мог работать с членами класса Dlg, необходимо включить в него Dlg.h— заголовочный файл класса Dlg: // dialogsView.cpp : реализация класса CDialogsView , // #include "stdafx.h" #include "dialogs.h" #include "dialogsDoc.h" #include "dialogsView.h" #include "Dlg.h" Теперь можно воспользоваться классом Dlg в классе вида. Начнем с создания объекта dlg этого класса: void CDialogsView::OnFileShowdialog() { Dlg dlg; .. . . Затем отобразим диалоговое окно на экране методом DoModal(). Данный метод возвращает целое значение, которое мы сохраняем в целой переменной result: void CDialogsView::OnFileShowdialog() { Dlg dlg; int result = dlg.DoModal(); } Диалоговое окно находится на экране. При желании пользователь может нажать кнопку Нажми меня— наш текст будет занесен в переменнуюm_text. Кактолькоокно диалога будет закрыто кнопкой ОК, текст из переменной m_text можно вывести в клиентской области окна программы. Прежде всего, необходимоубедиться, что пользователь действительно нажал кнопку ОК: void CDialogsView::OnFileShowdialog() { Dlg dlg; int result = dlg.DoModal(); if(result == IDOK) { } } ПОДСКАЗКА:При желании можно сделать так, чтобы диалоговое окно возвращало ваше собственное значение — для этого необходимо передать его методу EndDialog(). Если пользователь действительно нажал кнопку ОК, необходимо прочесть содержимое текстовой строки из переменной m_text. Оно хранится в документе, поэтому сначала нужно получить указатель на документ: void CDialogsView::OnFileShowdialog() { Dlg dlg; int result = dlg.DoModal(); if(result == IDOK) { CDialogsDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); } } Мы создадим в документе новый объект класса CStringс именем StringData(он инициализируется в конструкторе): // dialogsDoc.h: интерфейс класса CDialogsDoc class CDialogsDoc: public CDocument { protected: // создание только при сериализации CDialogsDoc(); DECLARE_DYNCREATE(CDialogsDoc) // Атрибуты public: CString StringData; В объект StringDataбудет помещен текст из переменной m_text: void CDialogsView::OnFileShowdialog() { Dlg dlg; int result = dlg.DoModal(); if(result == IDOK) { CDialogsDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDoc->StringData = dlg.m_text; Invalidate(); } } Как видите, получить данные из диалогового окна очень просто. Даже несмотря на то, что оно закрыто, объект все еще существует, а данные объекта остаются неприкосновенными. Строка m_text получена из диалогового окна. Остается вывести ее в клиентской области. Для этого мы воспользуемся методом OnDraw(), поэтому сейчас следует форсировать его вызов при помощи метода Invalidate(). Метод OnDraw() отображает строку из диалогового окна: void CDialogsView::OnDraw(CDC* pDC) { CDialogsDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDC->TextOut(0, 0, pDoc->StringData); } Программа готова. Запустите ее. Откройте диалоговое окно командойFile ->Show Dialog.... Нажмите кнопку Нажми меня — в текстовом поле появляется строка"Текст в диалоговом окне". Закройте диалоговое окно. Содержимое текстового поля выводится в клиентской области главного окна. Программа dialogs работает как положено — мы запускаем диалоговое окно и получаем данные при его закрытии. Мы узнали, как пользоваться диалоговыми окнами в Visual C++. |
||
Последнее изменение этой страницы: 2018-04-12; просмотров: 375. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |