C++. MFC. Создание меню

Меню программы — одна из важнейших частей, составляющих ее. С помощью MFC вполне реально реализовать его в своей программе, что сейчас мы и сделаем. Основное приложение не будет сложным, его задача подсчитать, сколько символов в веденной строке.

Создадим MFC — приложение на основе диалоговых окон, именованное Symbols. Уберем галку использовать библиотеки Юникода, в поле «Заголовок диалогового окна» впишем «Программа подсчета символов» и нажмем «Готово».

Сразу удалим все лишние элементы с диалогового окна, чтобы оно было пустым. В «Окне ресурсов» щелкнем по пустому месту правой кнопкой мыши:

MFC. C++. Меню программы

В открывшемся окне выбираем «Меню», нажимаем «Создать». Теперь в закладке «Окно ресурсов» мы имеем файл IDR_MENU1 отвечающий за меню (рис. — область 1) и собственно область для работы с ним (рис. — область 2).

Окно ресурсов в visual c++. MFC

Нажатие левой кнопкой мыши по этой области позволит задать название пункта меню. Первое название мы зададим «&Файл», где & подчеркивает имя пункта, и дает возможность обратится к нему при помощи сочетания клавиш ALT+F. Клавиша Enter подтверждает ваше действие. Как видите, прослеживается иерархия, которую мы можем продолжить, как на более низкие уровни, так и тождественные созданному. Добавим под меню «Файл» пункт «Посчитать», так как это показано на скриншоте.

В свойствах последнего, написан его ID (у меня это ID_32771), позже с его помощью мы свяжем пункт меню «Посчитать» с событием. А сейчас в ветке «Файл» задайте последний раздел «&Выход».

Рядом создадим меню «&Помощь», а под ним пункт «&О программе», нажав на который пользователь увидит сведения о приложении (их мы оставим по умолчанию).

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

Связываем меню с диалоговой панелью

На этом визуальное проектирование меню программы законченно, пришло время планировать диалоговую панель. С помощью панели элементов поместите в главное окно «Static Text» и «Edit Control», изменив ID второго на IDC_SYMB_EDIT.

Окно с меню

Добавим переменную m_S типа CString для поля Edit Control. Она нужна для получения доступа к полю, в которое будет вводиться строка.

После каждого использования поля ввода, происходит событие EN_CHANGE, нужно добавить в его код оператор, обновляющий переменные элементов управления. Зайдите в «Мастер классов» (Верхние меню>Проект>Мастер классов) и найдите там сообщение EN_CHANGE.

Мастер классов

Нажмите «Добавить обработчик…» всплывет окно, в котором следует нажать OK, и наконец изменить код функции на следующий:

1
2
3
4
5
6
7
8
9
void CSymbolsDlg::OnChangeSymbEdit()
{
// TODO: Если это элемент управления RICHEDIT, то элемент управления не будет
// send this notification unless you override the CDialogEx::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
UpdateData(TRUE);
// TODO: Добавьте код элемента управления
}

После выполнения этого оператора переменной m_S будет присвоено значение содержимого окна редактирования.

Зададим пункту меню «Посчитать» действия, необходимые для работы нашей программы. Как помните его ID — ID_32771. Зайдем в «Мастер классов…» и добавим обработчик, выделив сообщение COMMAND идентификатора объектов ID_32771.

MFC Class Wizrad. Kvodo

Теперь нажмите «Изменить код» и впишите в тело функции следующие строки.

1
2
3
4
5
6
void CSymbolsDlg::On32771()
{
char str[1000];
itoa(strlen(m_S),str,10);
MessageBox(str, «Всего символов»);
}

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

Для пункта «Посчитать» мы добавляли обработчик событий непосредственно через «Мастера классов». Альтернативный способ связывания кода с нужным событием заключается в следующем:

  • открываем окно для работы с меню;
  • щелкаем правой кнопкой мыши по пункту «Выход»;
  • выбираем «Добавить обработчик событий…»;
  • в появившемся окне в поле «Список классов» устанавливаем значение CSymbolsDlg, а в поле «Тип сообщения» COMMAND;
  • жмем «Добавить/править».

MFC. Добавление обработчика событий

Изменим код функции, добавив следующий оператор:

1
2
3
4
void CSymbolsDlg::On32772()
{
OnOK();
}

Приступим к последнему этапу: свяжем код с пунктом «О программе». Аналогично предыдущему шагу добавим к нему обработчик COMMAND, изменим функцию таким образом:

1
2
3
4
5
void CSymbolsDlg::On32773()
{
CAboutDlg dlg;
dlg.DoModal();
}

Оператор CAboutDlg dlg создает объект класса CAboutDlg именованный dlg, а dlg.DoModal() выводит диалоговую панель.

Программа создана! Файлы ее исходного кода Вы можете скачать по ссылке.

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...