Студопедия

КАТЕГОРИИ:

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

Отображение диалогового окна




На экране диалоговое окно должно появляться при выборе команды 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; просмотров: 333.

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