«

»

Visual C++. MFC. Основные принципы разработки

Открыв проект, созданный при помощи «Мастера приложений», то Вы увидите пустое окно (возможно это исправили в версиях позднее Visual C++ 2010). Для того, чтобы вернуть диалоговое окно, которые было у нас в прошлом уроке, следует активировать вкладку «Окно ресурсов», открыть папку «Dialog», и в ней два раза щелкнуть по «IDD_имя_проекта».

Окно ресурсов Visual C++ MFC

Щелкни для увеличения

 

Если Вы не найдете вкладки «Окно ресурсов», то следует сделать ее видимой, для этого: «Вид»>>«Ресурсы». Еще необходимо активировать «Обозреватель решений», чтобы было возможно в ходе работы переключаться между диалоговым окном и кодом программы. Теперь, когда все готово, напишем программу, имеющую практическое значение.

Постановка задачи:

Написать программу, пересчета из градусов в радианы. Пользователь должен вводить значения в градусах, а получать эти же значения в радианах. Визуально это будет выглядеть так: в центре окна располагается фрейм для ввода данных, под ним кнопка «Выход» и кнопка «Пересчитать».

Решение задачи:

Для начала удалим метку TODO из нашей программы (выделить и нажать Delete). При помощи «Панели элементов» добавим метку (Static Text) и поле редактирования (Edit Control).

Панель элементов Visual C++ MFC

Щелкни для увеличения

 

Изменим текст метки, для этого выделим ее и нажав правую клавишу мыши выберем пункт «Свойства». Справа появится панель, в строке «Подпись» изменим значение «Статический» на «Введите значение в градусах».

Свойства элементов в Visual C++

Щелкни для увеличения

 

Аналогичным образом изменим значение «Подпись» (Caption англ.) у кнопок «ОК» и «Отмена», на «Пересчитать» и «Выход». Окно вашей программы должно быть примерно, такое как на скриншоте.

Snap 2012-12-25 at 12.58.26

 

Теперь напишем функцию, которая будет определять действие программы после нажатия пользователя по кнопке «Пересчитать». Для переопределения действий необходимо:

  1. В свойствах кнопки поменять значение параметра ID, впишем туда значение ID_radian. Значение, которое стоит по умолчанию закрывает диалоговое окно, что нам не нужно.
  2. Щелкаем дважды по кнопке «Пересчитать»  и попадаем в окно с кодом, где в качестве тела функции OnBnClickedradian() вводим строку MessageBox(«Пока нет текста функции обработки»);. Запустив приложение и нажав на кнопку «Пересчитать», Вы должны увидеть следующие окно, иначе (скорее всего) допущена ошибка в настройках при создании проекта.Snap 2012-12-26 at 17.25.12
  3. Осталось написать текст в функцию OnBnClickedradian, но сначала добавим переменную, которая будет отвечать за «Поле редактирования». Для этого щелкаем правой кнопкой мыши по полю в которое вводятся данные, выбираем «Добавить переменную…». Появится окно, в поле «Имя переменной» вписываем название этой самой переменной (я написал m_Edit). В ее свойствах указываем тип возвращаемого компонентом значения (выберем float), для этого: «Категория»->«Тип переменной»->float. Должно быть так как на скриншоте
    Мастер добавления переменной-члена mfc

    Щелкни для увеличения

  4. Ну и наконец изменяем код функции 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);
}

 

Запускаем наше приложение, надеясь что оно работает). Результат выглядит примерно так

Включай картинки!

 

Подводя итоги, выделим основные этапы создания простого визуального приложения:

  1. Создаем шаблон приложения типа «Диалоговое окно»;
  2. Размещаем в этом окне нужные нам компоненты при помощи «Панели элементов»;
  3. Изменяем ID тех кнопок, которые будут управлять работой приложения;
  4. Определяем имена и возвращаемые значения компонентов «Поле редактирования»;
  5. Программируем текст функций, отвечающих за обработку событий при щелчке мыши по кнопкам.

2 комментария

  1. DevilRigoll

    MessageBox(«Форма закрывается»); у меня не работает и пишет вот это
    Ошибка 1 error C2653: MessageBoxW: не является именем класса или пространства имен c:\users\devilrigoll\documents\visual studio 2013\projects\mfcapplication2\mfcapplication2\mfcapplication2dlg.cpp 159 1 MFCApplication2

    1. А. С. Третьяков

      Если вы сделали все точно также, то приложение будет работать. Иначе, возможно, дело в самой программе (в 2010 версии со стандартными настройками, не должно возникать сложностей).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вы можете использовать эти теги HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Проверка на человечность *