Студопедия

Главная страница Случайная страница

Разделы сайта

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






Приложение, основанное на диалоге






Приложение, основанное на диалоге – это Dialog Based Application, этапы создания которого следующие.

1. Вызов команды File/New…

2. Настройка параметров проекта в окне AppWizard/Projects:

· тип приложения – MFC AppWizard (exe),

· имя проекта (Name),

· размещение проекта (Location),

· флажок создания нового рабочего пространства в состоянии «установлен»,

· нажать OK.

3. Первый шаг мастера: выбор варианта приложения – Dialog based, использовать для ресурсов по умолчанию английский язык.

4. Второй шаг мастера: отменить добавление окна About Box (снять флажок About Box), этим действием мы упростим код программы, остальные настройки можно оставить без изменения, кроме того, можно изменить текст заголовка окна приложения (title).

5. Третий шаг мастера: можно все настройки оставить без изменения; на этом шаге среда получает указание включать автоматически комментарии в текст программы, а также задается способ подключения библиотеки MFC к программе – динамическое подключение (As a shared DLL); для опытных программистов можно отменить добавление в код программы комментариев; при необходимости исполнения разрабатываемого приложения на компьютерах, где не установлены соответствующие файлы библиотеки MFC, сделать статическое подключение библиотеки (As a statically linked library)

На этом работа мастера MFC AppWizard завершается, каркас приложения создан. Рассмотрим, какие классы и файлы мы получили.

В каркас такого приложения вошли два класса: класс приложения, производный от класса библиотеки MFC CWinApp, и класс диалоговой панели, производный от класса CDialog. Среда разработки автоматически дает имена этим производным классам в соответствии со следующим правилом: в начало имени производного класса ставится буква C, затем добавляется имя проекта, а в конце – имя базового класса. Например, если проект получил имя Lab1, то его собственный класс приложения будет иметь имя CLab1App, а класс диалогового окна – CLab1Dlg.

Рассмотрим файловый состав проекта:

Lab1.h и Lab1.cpp – модуль, содержащий описание класса приложения CLab1App;

Lab1Dlg.h и Lab1Dlg.cpp – модуль, содержащий описание класса диалоговой панели приложения CLab1Dlg;

stdafx.h и stdafx.cpp – системный модуль, генерируемый средой для связи с библиотеками C++, прежде всего с библиотекой MFC;

resource.h – заголовочный файл, определяющий идентификаторы элементов управления;

Lab1.rc – файл ресурсов, содержащий описание в текстовом формате диалоговой панели, меню и других ресурсов Windows. Стандартная диалоговая панель (рис. 21.2), создаваемая средой по умолчанию, включает в себя строку заголовка с кнопкой закрытия окна, статический текст «TODO: place dialog controls here» и две кнопки – OK и Cancel; обе кнопки выполняют по умолчанию одно и то же действие – завершение программы.

Рассмотрим пример простейшего диалога: на диалоговую панель помещена кнопка. Когда пользователь нажимает кнопку, появляется стандартное информационное окно MessageBox с сообщением «Команда выполнена!».

Для создания такой программы выполним следующие шаги:

· перейдем на вкладку ResourceView окна Workspace,

· раскроем ветвь диаграммы ресурсов.

Рис. 21.2. Стандартная диалоговая панель

Выделим на диаграмме ресурсов объект – диалоговую панель IDD_LAB1_DIALOG – и в его контекстном меню выберем команду Properties. В открывшемся окне изменим язык ресурса на русский (окно Language). Теперь в диалоговой панели для надписей можно будет использовать кириллицу. Закроем окно Properties.

Дважды щелкнем на объекте IDD_LAB1_DIALOG в окне Workspace, при этом в графическом редакторе откроется диалоговая панель. Удалим с диалоговой панели кнопки OK и Cancel, а также статическую строку «TODO: place dialog controls here».

На панели элементов управления Controls выберите кнопку – объект Button –и укажите щелчком левой кнопки мыши место размещения объекта в диалоговом окне. В окне диалога при этом появится небольшая кнопка с надписью Button1.

Отредактируем свойства кнопки. Для этого выделим кнопку Button1 и в ее контекстном меню выберем команду Properties. Затем в окне ID изменим идентификатор кнопки с IDC_BUTTON1 на IDC_BUTTON_MSG. Изменять идентификатор вовсе не обязательно, но для облегчения чтения программы следует элементам программы давать «говорящие» имена, т. е. идентификаторы, которые не только называют элементы, но и содержат пояснения по данному элементу. Изменим также надпись на кнопке – в окно Caption введем произвольный текст, например, слово «Сообщение». Закроем окно свойств кнопки.

Создадим функцию, вызываемую нажатием кнопки. Для этого из контекстного меню кнопки выберем команду ClassWizard, которая откроет окно ClassWizard, при этом будет активна вкладка Message Maps. Message Maps – карта отображения сообщений – используется при работе с библиотекой MFC для связывания сообщения, элемента управления, реагирующего на это сообщение, и метода, выполняемого при появлении этого сообщения. Более подробно карту сообщений рассмотрим позже.

В окне Message Maps выполним следующие действия: в списке Object IDs активизируем объект IDC_BUTTON_MSG, в окне Message при этом отобразятся два сообщения, на которые реагирует кнопка – BN_CLICKED и BN_DOUBLECLICKED, что означает одиночный и двойной щелчок мышью на кнопке соответственно. В списке Messages выберем сообщение BN_CLICKED, нажмем кнопку Add Function, напечатаем, если нужно, новое имя функции (по умолчанию будет сконструировано имя OnButtonMsg) и нажмем кнопку OK. Функция создана.

Редактируем функцию. Созданная только что функция не выполняет никаких действий, и наша задача - научить ее что-нибудь делать. Для редактирования функции в окне Message Maps должна быть выделена функция OnButtonMsg(), затем нажимаем кнопку Edit Code, после чего активизируется окно с текстом этой функции. Добавим в тело функции текст: MessageBox(" Команда выполнена! ");

Приложение готово. Откомпилируем его. Согласимся, если будет предложено откомпилировать недостающие файлы. Если при компиляции не будут обнаружены ошибки, выполним приложение.

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

Для выполнения этой задачи будем использовать предыдущее приложение – просто добавим в него новую функцию; с таким же успехом можно было бы создать новое приложение.

Для решения задачи выполним следующую последовательность действий.

Перейдем на вкладку ResourceView и дважды щелкнем на элементе IDD_LAB1_DIALOG, при этом в графическом редакторе откроется диалоговая панель.

Добавим в диалоговую панель новую кнопку, для этого элемент управления кнопку Button выберем в панели Controls (элементы управления) и поместим его в нужное место диалоговой панели. Если панель Controls по каким-либо причинам не видна на экране, включите ее командой Tools/Customize/Toolbars.

Зададим свойства кнопки – в ее контекстном меню выберем команду Properties, в окне свойств укажем идентификатор кнопки (ID) – IDC_BUTTON_CALC, в окне Caption введем текст – Вычисления. Закроем окно свойств.

Добавим в диалоговую панель окно редактирования Edit, которое будет использоваться для ввода и вывода информации. В контекстном меню окна Edit выберем команду Properties и зададим идентификатор окну – IDC_EDIT_RESULT. Закроем окно.

Свяжем с окном редактирования IDC_EDIT_RESULT переменную, которая будет использоваться для хранения числового значения, введенного в окно редактирования. Выделим окно редактирования, и в его контекстном меню выберем команду ClassWizard, вкладку Member Variable. В открывшемся окне проверим информацию, помещенную в окна: Project – Lab1, Class – CLab1Dlg. В окне Control IDs выделим объект IDC_EDIT_RESULT, нажмем кнопку Add Variable. В открывшемся окне Add Variable укажем имя переменной, оно обязательно должно начинаться с символов m_, – m_Result, укажем категорию переменной (value – переменная или control – элемент управления) – value, тип переменной – CString. Тип (класс) CString представляет собой последовательность символов – строку, над которой определены некоторые действия, например, сложение. Нажмем кнопку OK, затем второй раз OK, после чего переменная m_Result будет добавлена в программу.

Создадим функцию – обработчик нажатия кнопки, которая будет выполняться при нажатии кнопки. Для этого в контекстном меню кнопки выберем команду ClassWizard. Эта команда позволит нам войти в приложение ClassWizard, генерирующее служебную часть кода класса. В окне ClassWizard на вкладке Message Maps проверим информацию, помещенную в окна: Project – Lab1, Class – CLab1Dlg. В окне Object IDs выделим объект IDC_BUTTON_CALC. В окне Messages выберем сообщение BN_CLICKED. Затем в правой части окна Message Maps нажмем кнопку Add function, в ответ на экране появится окно, предлагающее имя нашей функции – по умолчанию она будет называться
OnButtonCalc(). Можно дать функции другое имя или согласиться с предложенным. После нажатия кнопки OK среда вставляет в программу заготовку для этой функции.

Для редактирования кода функции нажмем кнопку Edit Code окна Message Maps, после чего мы окажемся внутри редактируемой функции.

В тело функции вставим следующие строчки:

UpdateData(TRUE); //Присваивание значений,

//введенных в элементы управления,

//переменным, связанным с этими

//элементами управления

double Number; //Объявление вещественной переменной

Number=atof(m_Result); //Преобразование переменной //типа CString, связанной с окном

//редактирования, в число

Number*=Number; //Вычисления

m_Result.Format(" %lf", Number); //Преобразование

//числового значения в значение

//типа CString и запись

//результата в переменную,

//связанную с окном редактирования

UpdateData(FALSE); //Вывод значений переменных,

//связанных с элементами

//управления, на экран и

//обновление элементов управления

В этом методе использовалась функция UpdateData(), которая устанавливает соответствие между элементами управления на диалоговой панели и связанными с ними переменными. Функция UpdateData() имеет один параметр логического типа. Значение TRUE этого параметра означает, что переменным элементов управления присваиваются значения, введенные в эти элементы; FALSE означает, что элементам управления присваиваются значения из соответствующих переменных. Если параметр не указан, функция по умолчанию использует значение TRUE.

Откомпилируем проект, выполним программу и убедимся, что она работает правильно.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.