Урок V
Связывание событий с
элементами управления
- Выберете ClassWizard в меню View
- Выберете закладку Member Variables в панели
ClassWizard
- Щелкните на кнопку Add Varible и задайте переменную
следующим образом:
Varible Name:
m_SpeedEdit
Category: Value
Varible Type: int
- Щелкните на кнопку OK.
- Теперь диалоговая панель MFC ClassWizard должна будет
выглядеть так:

- Так как вы определили переменную m_SpeedEdit как
переменную типа int, то вы можете задать максимальное и
минимальное значение этой переменной.
- Задайте в Maximum Value значение 100, это
значит, что вы сможете задавать значение переменной в интервале от
0 до 100.
- Щелкните на кнопку OK диалоговой панели
ClassWizard.
Связывание кода с событием EN_CHANGE
окна редактирования
Событие EN_CHANGE
происходит каждый раз при изменении содержимого окна редактирования,
это мы будем использовать для того, чтобы при каждом изменении
присваивать новое значение переменной m_SpeedEdit.
Чтобы связать код с событием EN_CHANGE, выполните
следующие действия:
- Выберете ClassWizard в меню View
- Выберете закладку Message Maps в панели
ClassWizard
- Используйте диалоговую панель ClassWizard для выбора
следующего события:
Class Name: CSpeedDlg
Object
ID: IDC_SPEED_EDIT
Messages: EN_CHANGE
- Щелкните на кнопку Add Fucntion и в раскрывшемся окне
нажмите кнопку OK.
- Сейчас ваша панель MFC ClassWizard должна будет
выглядеть так:

- Нажмите кнопку Edit Code и напишите следующий код в
функции OnChangeSpeedEdit():
void CSpeedDlg::OnChangeSpeedEdit()
{
// TODO: If
this is a RICHEDIT control, the control will not
// send this
notification unless you modify CDialog::OnInitDialog()
//
function to send the EM_SETEVENTMASK message to the control
//
with the ENM_CHANGE flag ORed into the lParam mask.
//
TODO: Add your control notification handler code here
////Мой код начинается здесь////
//Обновить экран
UpdateData(TRUE);
////Мой код заканчивается здесь////
}
- Вы ввели единственный оператор, который обновляет переменные
элементов управления, исходя из текущего содержимого диалогового
окна:
UpdateData(TRUE);
- Следовательно после выполнения данного оператора переменной
m_SpeedEdit будет присвоено значение содержимого окна
редактирования.
Связывание кода с пунктом
CurrentSpeed меню File
Сейчас вы свяжете код с
событием COMMAND, которое возникает при выборе пункта меню, в
данном случае при выборе пункта Current Speed.
Чтобы связать код с событием COMMAND, выполните следующие
действия:
Откройте закладку Resource View, раскройте пункт Speed
View, а там выбирите Menu. Выполните двойной щелчок по
IDR_MENU1.
- Теперь выполняем следующее:
- Выберете ClassWizard в меню View
- Выберете закладку Message Maps в панели
ClassWizard
- Используйте диалоговую панель ClassWizard для выбора
следующего события:
Class Name: CSpeedDlg
Object
ID: ID_FILE_CURRENTSPEED
Messages: COMMAND
- Щелкните на кнопку Add Fucntion и в раскрывшемся окне
нажмите кнопку OK.
- Нажмите кнопку Edit Code и напишите следующий код в
функции OnFileCurrentspeed():
void CSpeedDlg::OnFileCurrentspeed()
{
// TODO: Add
your command handler code here
////Мой код начинается здесь////
char
strSpeed[100];
itoa(m_SpeedEdit,strSpeed,10);
MessageBox(strSpeed);
////Мой код заканчивается здесь////
}
- Первые два оператора, преобразуют в строку целое значение,
хранящееся в переменной m_SpeedEdit:
char
strSpeed[100]; itoa(m_SpeedEdit,strSpeed,10);
- Последний оператор использует функцию MessageBox() для
вывода значения строки, хранящееся в переменной strSpeed:
MessageBox(strSpeed);
Связывание кода с пунктом Exit меню
File
Сейчас вы свяжете код с событием COMMAND,
которое возникает при выборе пункта меню, в данном случае при выборе
пункта Exit.
Чтобы связать код с событием COMMAND, выполните следующие
действия:
Откройте закладку Resource View, раскройте пункт Speed
View, а там выбирите Menu. Выполните двойной щелчок по
IDR_MENU1.
- Теперь выполняем следующее:
- Выберете ClassWizard в меню View
- Выберете закладку Message Maps в панели
ClassWizard
- Используйте диалоговую панель ClassWizard для выбора
следующего события:
Class Name: CSpeedDlg
Object
ID: ID_FILE_EXIT
Messages: COMMAND
- Щелкните на кнопку Add Fucntion и в раскрывшемся окне
нажмите кнопку OK.
- Нажмите кнопку Edit Code и напишите следующий код в
функции OnFileExit():
void CSpeedDlg::OnFileExit()
{
// TODO: Add your
command handler code here
////Мой код начинается здесь////
OnOK(); ////Мой код заканчивается здесь////
}
- Единственный оператор, который вы ввели завершает работу
программы.
Связывание кода с пунктом About меню
Help
Сейчас вы свяжете код с событием COMMAND,
которое возникает при выборе пункта меню, в данном случае при выборе
пункта About.
Чтобы связать код с событием COMMAND, выполните следующие
действия:
Откройте закладку Resource View, раскройте пункт Speed
View, а там выбирите Menu. Выполните двойной щелчок по
IDR_MENU1.
- Теперь выполняем следующее:
- Выберете ClassWizard в меню View
- Выберете закладку Message Maps в панели
ClassWizard
- Используйте диалоговую панель ClassWizard для выбора
следующего события:
Class Name: CSpeedDlg
Object
ID: ID_HELP_ABOUT
Messages: COMMAND
- Щелкните на кнопку Add Fucntion и в раскрывшемся окне
нажмите кнопку OK.
- Нажмите кнопку Edit Code и напишите следующий код в
функции OnHelpAbout():
void CSpeedDlg::OnHelpAbout()
{
// TODO: Add your
command handler code here
////Мой код начинается здесь////
//Создать объект класса CAboutDlg
CAboutDlg dlg;
//Вывести диалоговую панель About
dlg.DoModal();
////Мой код заканчивается здесь////
}
- Первый оператор введенный вами создает объект класса
CAboutDlg с именем dlg:
CAboutDlg dlg;
- Класс CAboutDlg dlg; был создан тогда, когда вы
создавали проект программы, его написал Visual C++, этот класс
связан с диалоговой панелью About.
- Следующий оператор выводит диалоговую панель About
используя функцию элемент к объекту
dlg:
dlg.DoModal();
- Как и предполагает имя функции, DoModal() выводит
диалоговую панель, как модальную диалоговую панель, это значит что
пока это окно выведено на экран, вы не сможете активировать другие
окна программы.
- Программа Speed завершена! Запустите ее и
поэксперементируейте с ней!
Вы закончили связывание событий с элементами управления