BiVANT  Книги     К началу главы

В.А. Биллиг, И.Х. Мусикаев
Visual C++  4 версия        
Книга для программистов.
"Русская редакция", 1997 г.

Глава 1(7)

Запуск проекта Hello  

Теперь постройте исполняемый файл (выбрав Build, как при компиляции стартового приложения) и выполните его. Он должен работать, как мы задумали: На завершающем этапе сценария можно многократно вводить имя в окно Вы, и тогда по "нажатию" кнопки Компьютер Вас будут приветствовать. Для окончания диалога достаточно щелкнуть кнопку OK или CANCEL. Вот как выглядит диалоговое окно проекта Hello, после того как Компьютер "ожил", дал совет и пользователь ввел свое имя (см. рис.1.8).

1_8.gif (4577 bytes) 

{Рис. 1.8. Окно проекта Hello в процессе диалога.}

Ввод/вывод данных разного типа  

Хотя проект Hello в первую очередь демонстрирует ввод и вывод в окно редактирования строковых переменных, рассмотренный здесь механизм работает для всех скалярных типов данных языка Visual C++.

К примеру, в наш сценарий можно добавить диалог о возрасте. Для этого в окне «возраста» наберите число лет как строку текста, передайте его в строковую переменную и приведите ее к нужному типу, благо, делается это достаточно просто.

Мы хотим, однако, на этом примере показать еще один способ ввода/вывода данных, отличный от рассмотренного в проекте Hello.  

Динамический обмен данных  

Создайте еще одну версию проекта, назвав ее, скажем, Hello1. Повторите все действия по проектированию интерфейса. Если Вы сохранили результаты работы первого этапа, это облегчит модификацию проекта. Изменения начинаются в момент связывания окон редактирования с переменными программы. В проекте Hello для переменных m_You и m_Comp Вы выбирали категорию Control и тип CEdit. В Hello1 выберите категорию Value и тип CString.

Для Ваших переменных появится дополнительная возможность установить максимально допустимое число символов. Задайте, например, 50 для m_You и 80 для m_Comp

Теперь связанные с окнами переменные m_You и m_Comp стали обычными строковыми переменными. Умница ClassWizard., понимая это, создаст остов класса с другим механизмом ввода/вывода. Прежде чем его обсуждать, закончим модификацию проекта.

Добавьте дополнительно в определение метода OnInitDialog инициализацию переменных:

m_You = "";

m_Comp = "";

 

Измените текст функции обработки OnYou на:

 

switch (++Count)

{

// Первый щелчок

case 1 :       m_You = "Привет, компьютер!"; UpdateData(FALSE); break;

// Второй щелчок

case 2 :       m_You = "Компьютер, проснись!"; UpdateData(FALSE); break;

// Третий щелчок

case 3 :       m_You = "Поздоровайся, наконец!"; UpdateData(FALSE); break;

 

default : UpdateData(TRUE);

}

 

Текст определения функции OnComp заменим на такой:

 

CString s1="Совет дня : Никогда не разговаривайте с неизвестными!

Ваше имя, пожалуйста.",

s2;

 

if (Count >= 3)

if(!InviteDone)

{

m_Comp = s1;

m_You = "";

InviteDone = TRUE;

UpdateData(FALSE);

}

else

{

UpdateData(TRUE);

if (m_You =="") m_You = "люди";

m_Comp ="Здравствуйте, "+ m_You +

" ! Всегда рад с Вами работать! " );

m_You = "";

UpdateData(FALSE);

}

 

Как же теперь работает ввод/вывод? Напомним: с помощью ClassWizard. Вы установили соответствие между элементами управления и переменными класса. ClassWizard. фиксирует, что между окнами редактирования и переменными установлены связи:

 

окно IDC_EDYou переменная m_You,

 

окно IDC_EDComp переменная m_Comp.

 

Вызов функции UpdateData включает одновременную передачу данных для всех пар "окно — переменная". Направление передачи задается булевским параметром функции UpdateData. Значение FALSE означает передачу из переменной в окно, а TRUE — из окна в переменную.

Заметьте: в момент передачи данные преобразуются в нужный тип автоматически, поскольку известен тип переменной, связанной с окном.

Более того, при вводе данных пользователем проверяется их корректность. Строковые данные проверяются на максимально допустимое число символов, целочисленные — на возможный диапазон значений, определяемый при связывании переменной с окном.

Сказанного здесь достаточно, чтобы понимать и использовать динамический обмен данных. Более подробное знакомство с механизмом обмена требует рассмотрения функции DoDataExchange, DDX- и DDV-функций. Мы обсудим их в главе 7.

Для ввода/вывода структуры данных надо спроектировать специальное окно диалога с окошками для каждого из полей структуры.

Ввод/вывод массивов можно осуществлять по-разному. По сути, простейший способ продемонстрирован в проекте Hello, поскольку многократный ввод имени позволяет сформировать массив имен.

   Назад                Вперед

Hosted by uCoz