Открыв проект, созданный при помощи «Мастера приложений», то Вы увидите пустое окно (возможно это исправили в версиях позднее Visual C++ 2010). Для того, чтобы вернуть диалоговое окно, которые было у нас в прошлом уроке, следует активировать вкладку «Окно ресурсов», открыть папку «Dialog», и в ней два раза щелкнуть по «IDD_имя_проекта».
Если Вы не найдете вкладки «Окно ресурсов», то следует сделать ее видимой, для этого: «Вид»>>«Ресурсы». Еще необходимо активировать «Обозреватель решений», чтобы было возможно в ходе работы переключаться между диалоговым окном и кодом программы. Теперь, когда все готово, напишем программу, имеющую практическое значение.
Постановка задачи:
Написать программу, пересчета из градусов в радианы. Пользователь должен вводить значения в градусах, а получать эти же значения в радианах. Визуально это будет выглядеть так: в центре окна располагается фрейм для ввода данных, под ним кнопка «Выход» и кнопка «Пересчитать».
Решение задачи:
Для начала удалим метку TODO из нашей программы (выделить и нажать Delete). При помощи «Панели элементов» добавим метку (Static Text) и поле редактирования (Edit Control).
Изменим текст метки, для этого выделим ее и нажав правую клавишу мыши выберем пункт «Свойства». Справа появится панель, в строке «Подпись» изменим значение «Статический» на «Введите значение в градусах».
Аналогичным образом изменим значение «Подпись» (Caption англ.) у кнопок «ОК» и «Отмена», на «Пересчитать» и «Выход». Окно вашей программы должно быть примерно, такое как на скриншоте.
Теперь напишем функцию, которая будет определять действие программы после нажатия пользователя по кнопке «Пересчитать». Для переопределения действий необходимо:
- В свойствах кнопки поменять значение параметра ID, впишем туда значение ID_radian. Значение, которое стоит по умолчанию закрывает диалоговое окно, что нам не нужно.
- Щелкаем дважды по кнопке «Пересчитать» и попадаем в окно с кодом, где в качестве тела функции OnBnClickedradian() вводим строку MessageBox(«Пока нет текста функции обработки»);. Запустив приложение и нажав на кнопку «Пересчитать», Вы должны увидеть следующие окно, иначе (скорее всего) допущена ошибка в настройках при создании проекта.
- Осталось написать текст в функцию OnBnClickedradian, но сначала добавим переменную, которая будет отвечать за «Поле редактирования». Для этого щелкаем правой кнопкой мыши по полю в которое вводятся данные, выбираем «Добавить переменную…». Появится окно, в поле «Имя переменной» вписываем название этой самой переменной (я написал m_Edit). В ее свойствах указываем тип возвращаемого компонентом значения (выберем float), для этого: «Категория»->«Тип переменной»->float. Должно быть так как на скриншоте
- Ну и наконец изменяем код функции OnBnClickedradian():
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void CKvodoDlg::OnBnClickedradian()
{ float gr, rad; char s[80]; //UpdateData позволяет считать из компонента //»Поле редактирования» значение, введенное пользователем UpdateData(TRUE); //считывание в переменную gr данных из поля ввода gr=m_Edit; rad=gr*3.14159/180; sprintf(s, «%g градусов это %g радиан», gr, rad); //функция MessageBox формирует диалоговое окно //со строкой, хранящейся в переменной s MessageBox(s); } |
Запускаем наше приложение, надеясь что оно работает). Результат выглядит примерно так
Подводя итоги, выделим основные этапы создания простого визуального приложения:
- Создаем шаблон приложения типа «Диалоговое окно»;
- Размещаем в этом окне нужные нам компоненты при помощи «Панели элементов»;
- Изменяем ID тех кнопок, которые будут управлять работой приложения;
- Определяем имена и возвращаемые значения компонентов «Поле редактирования»;
- Программируем текст функций, отвечающих за обработку событий при щелчке мыши по кнопкам.
MessageBox(«Форма закрывается»); у меня не работает и пишет вот это
Ошибка 1 error C2653: MessageBoxW: не является именем класса или пространства имен c:\users\devilrigoll\documents\visual studio 2013\projects\mfcapplication2\mfcapplication2\mfcapplication2dlg.cpp 159 1 MFCApplication2
Если вы сделали все точно также, то приложение будет работать. Иначе, возможно, дело в самой программе (в 2010 версии со стандартными настройками, не должно возникать сложностей).