Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Визуальное программирование на основе библиотеки MFC. Методические указания к лабораторным работам по курсу «Визуальное программирование» для студенто
.pdf
Задание
1. Выполнить пример по разработке приложения с меню:
a. Разработать ниспадающее меню из примера. При выборе
соответствующего пункта меню должно появляться окно сообщений с
описанием этого пункта.
b. Разработать контекстное меню из примера в виде копии пункта
ниспадающего меню.
2. Выполнить задание в соответствии с вариантом:
a. Разработать ниспадающее меню в соответствии с вариантом
задания.
b. Разработать контекстное меню в соответствии с вариантом в виде
копии пункта ниспадающего меню.
c. Выбрать какое-либо приложение и запустить его при помощи
пункта созданного меню (можно запустить приложение по выбору –
например Paint).
3. Показать результаты работы преподавателю.
Пример выполнения работы
В качестве примера создадим несложное диалоговое приложение, в
котором будет содержаться единственная кнопка и меню. Для создания такого
приложения произведем следующие шаги:
1. Создаем каркас приложения (как описано в разделе о создании
каркаса), в котором будет использоваться меню (имя проекта – menu).
2. После того, как мастер создаст каркас приложения, удалим из
созданного диалогового окна все элементы управления.
Для этого идем на вкладку ресурсов. В окне ресурсов раскрываем +
список ресурсов
31

Рис. 24. Удаление стандартных элементов управления.
Раскрываем Ресурс Dialog (нажимаем на +). Двойным кликом раскрываем
Ресурс IDD_MENU_DIALOG. На экране появляется форма нашего созданного
приложения из которого мы удаляем все элементы управления.
3. Вставим в диалоговое окно единственную кнопку. Установим имя
кнопки ИД - IDC_EXIT. Надпись на кнопке (свойство Подпись - Exit). Чтобы
показалось окно инструментов Панель элементов выберите команду Вид –
Панель элементов. В открывшемся окне инструментов найдем кнопку button и
разместим ее на форме в центре диалогового окна.
32

Рис. 25. Выбор кнопки.
4. Добавим для кнопки функцию (двойной клик по кнопке и откроется
окно кода). Код будет использовать функцию ОnОК(). Функция ОnОК()
приводит к тому, что программа закрывается.
void CmenuDlg::OnBnClickedExit()
{
//Записываем код для кнопки Exit
OnOK();
}
5. Добавляем в приложение меню.
Выбираем закладку ресурсов Окно Ресурсов в панели рабочего
пространства. Щелкаем правой кнопкой мыши по ярлыку menu, появляется
контекстное меню. Выполняем команду Добавить – Ресурс.
В открывшемся диалоговом окне Добавление ресурса выбираем из списка
предлагаемых ресурсов опцию Menu.
33

Рис. 26. Выбор типа ресурса
Конструктор меню Menu откроется в окне редактирования,
расположенном в основном окне студии разработчика. Первый элемент будет
выделен примерно так, как на рисунке 27.
Рис. 27. Добавление меню
Сейчас мы имеем ресурс меню (пустое меню) и можем приступить к его
редактированию, будем добавлять к нему необходимые пункты.
6. Редактирование меню
Для добавления пунктов меню осуществим следующие действия:
Щелкнем кнопкой на выделенной области и введем надпись, которая
появится в данном элементе меню в поле Подпись, в качестве примера введем
здесь File. В этом месте мы задаем текст, который будет виден пользователю
приложения на данном элементе меню в панели меню тогда, когда приложение
будет работать.
34

Первый элемент вываливающегося меню теперь выделен. Вводим
Название пункта
Свойство Надпись
Свойство ИД
File
File
Hello
Hello
ID_FILE_HELLO
Exit
Exit
ID_FILE_EXIT
Help
Help
About
About
ID_HELP_ABOUT
выводимый текст для этого пункта меню. В качестве примера введем текст
Неllо. По аналогии вводим текст для следующего пункта меню Exit. Повторим
эти этапы и введем следующие пункты меню Help и выпадающее меню About
Рис. 28. Редактирование меню
7. Задание свойств пунктов меню
Запишем и проверим свойства Надпись и ИД каждого созданного пункта
в соответствии с таблицей
Таблица 3
Свойства пунктов меню
Для этого выделим соответствующий пункт меню и кликнем правой
кнопкой. Затем выберем из выпадающего списка Свойства. В появившемся
окне Свойства для каждого пункта меню введем соответствующие данные как
показано в таблице 3.
Это будет выглядеть примерно так (например, для пункта Hello).
35

Рис. 29. Свойства пункта Hello
Связываем созданное меню с окном приложения.
Если сейчас откомпилировать и запустить приложение, то мы не увидим
наше меню, так как мы не связали его с окном нашего приложения. Для этого
откроем форму нашего приложения, кликнем правой кнопкой мыши по форме
и выберем Свойства. В открывшемся меню свойств выбираем Свойство -
Меню. В качестве значения этого свойства в раскрывшемся списке выбираем
наше созданное меню.
Теперь при построении и компиляции нашего приложения мы увидим на
форме наше созданное меню.
36

Рис. 30. Связывание меню с диалогом.
Далее выполните построение проекта. Запустите его на выполнение.
Рис. 31. Работающее приложение
Однако, после того как мы выберем какой-либо пункт из нашего меню,
по-прежнему с приложением ничего не произойдет.
37

Добавляем функции к элементам меню
Добавим функцию к пункту Hello меню приложения. Для этого выполним
последовательно следующие шаги:
1. Перейдем на вкладку Окно классов нашего приложения. Раскроем
классы приложения (клик по плюсу или двойной клик по названию). Выберем
класс CMenuDlg. Делаем клик правой кнопкой мыши по классу CMenuDlg и
выполняем команду Свойства. В открывшемся окне выбираем значок Событий.
Выбираем событие нужного нам пункта меню (в данном случае
(ID_FILE_HELLO), раскрываем его и выбираем событие COMMAND, в
раскрывшемся списке добавляем функцию Add<OnFileHello>
Рис. 32 Добавление функции к пункту меню Hello
2. Пишем код созданной нами функции
void CmenuDlg::OnFileHello()
{
//Здесь пишем наш код
CString HELLO; //Объявляем переменную HELLO типа CString
HELLO="Hello there"; //присваиваем этой переменной значение текст
MessageBox(HELLO); // Показываем присвоенное значение
// в диалоговом окне MessageBox()
}
38

Замечание: Событие COMMAND осуществляет передачу приложению
соответствующего сообщения в случае выбора данного пункта меню. Если с
данным сообщением связать какую то функцию, то это будет равносильно
тому, как если разместить функцию в выбираемом пункте меню.
Добавим функцию к пункту меню Exit
Вызов средств обработки событий элементов меню можно осуществить,
если указать имена существующих функций, связав их событием COMMAND.
Функция добавляется к соответствующему идентификатору объекта из меню.
Используем функцию OnBnClickedExit в элементе меню EXIT.
Проделаем теже действия,что и при добавлении функции OnFileHello.
Не соглашаемся на предложенное имя функции по умолчанию.Вводим
имя OnBnClickedExit.Это приведет к тому ,что существующая функция
OnBnClickedExit связывается с данным пунктом меню.
Рис. 33 Добавление функции к пункту меню Exit.
Код функции должен быть таким:
void CmenuDlg::OnBnClickedExit()
{
//Записываем код для кнопки Exit в меню
OnOK(); //встроенная стандартная функция
}
Добавление функции к пункту меню About
Добавим функцию к объекту ID_HELP_ABOUT с использованием
события COMMAND (Выполняется аналогично пункту Hello)
39

Редактируем код программы:
void CmenuDlg::OnHelpAbout()
{
//Здесь редактируем код
CAboutDlg dlgAbout;//объявляем переменную dlgAbout типа CAboutDlg
dlgAbout.DoModal();//показываем окно About
…
}
Создадим в выпадающем меню HELP подменю PAINT
Напишем обработчик и запустим программу Paint на нашем компьютере.
1. Идем на вкладку Окно классов
2. Правой кнопкой мыши по классу CmenuDlg, в выпадающем меню
выбираем команду – Свойства.
3. Выбираем значок События.
4. В окне Свойства при нажатом значке Событий выбираем
интересующее нас событие (в нашем случае ID_HELP_PAINT)
5. Раскрываем + и связываем наш обработчик обработчик меню с
событием COMMAND. Событие COMMAND добавляет функцию к
соответствующему идентификатору объекта из меню.
6. В созданной функции пишем най код
void CmenuDlg::OnHelpPaint()
{
CString strpgmname; // создаем переменную типа CString
// присваиваем переменной какое то значение и указываем путь нашего
//приложния
strpgmname="C:/Windows/System32/mspaint.exe";
//Вызываем и показываем наше приложение
WinExec((LPCSTR) strpgmname, SW_SHOW);
...
}
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
