При запуске программы, основанную на диалоге, вам нужно
установить определенные значения некоторых элементов управления.
Вам необходимо, чтобы флажки Visible и Enable были
отмечены, иначе окна редактирования не будет видно. Для этого
выполните следующие действия:
Зайдите в View->ClassWizard,откройте закладку
Message Maps.
В Message IDs выберете CTestDlg, в
Messages появится список событий, с которыми может быть
связано диалоговое окно. Выберете там событие
WM_INITDIALOG. Оно происходит, когда запускается программа
и инициализируется диалоговое окно.
Щелкнете на кнопку Add Function, а затем нажмите на
кнопку Edit Code, для редактирования иходного кода.
Функция OnInitDialog() уже содержит часть кода
написанного VC++ Найдите в нем коментарий // TODO: Add
extra initialization here, который сообщает нам, что после
него мы можем добавить свой код.
//
TODO: Add extra initialization here // Добавьте свою
инициализацию
////////Мой код начинается здесь///////////
//Устаноить переменную флажка VisibleCheck и EnabledCheck в
состояние //TRUE m_VisibleCheck=TRUE; m_EnableCheck=TRUE; //Обновить
экран UpdateData(FALSE);
////////Мой код заканчивается здесь///////////
return TRUE; // Вернуть TRUE, если только вы не установили
фокус на элемент управления }
Рассмотрим код:
Первый и второй операторы, который которые вы ввели
присваивают переменным m_VisibleCheck и
m_EnableCheck значение TRUE. Это означает, что при
запуске программы флажки будут отмечены.
Последний оператор UpdateData(FALSE) обновляет экран,
т.е. он обновляет значения переменных элементов управления на
текущие. В нашем случае, при выполнении этого оператора текущие
содержимое переменных связанных с флажками будет передано к ним.
Теперь для того, чтобы посмотреть инициализирующий код в
действии выполните программу. Главное окно вашей программы
должно будет выглядеть так:
Флажки должны
быть отмечены.
Связывание кода с событием BN_CLICKED
кнопки Exit
При нажатии на кнопку Exit программа
Test.Exe завершится.
Чтобы связать код с событием BN_CLICKED кнопки
EXIT, выполните следующие действия:
Выбирете ClassWizard в меню View
Выберете закладку Message Maps в панели
ClassWizard
Исползуйте диалоговую панель ClassWizard для выбора
следующего события: Class Name: CTestDlg Object ID:
IDC_EXIT_BUTTON Messages: BN_CLICKED
Щелкните на кнопку Add Fucntion и в раскрывшемся окне
нажмите кнопку OK.
Сейчас ваша панель MFC ClassWizard должна будет
выглядеть так:
Нажмите кнопку Edit Code и напишите следующий код в
функции OnExitButton():
void CTestDlg::OnExitButton() { // TODO: Add your
control notification handler code here
////////Мой код начинается здесь///////////
OnOK();
////////Мой код заканчивается здесь///////////
}
Функция OnOK(), которую вы ввели завершает программу,
при нажатии на кнопку Exit.
Связывание кода с событием BN_CLICKED
кнопки Test
При нажатии на кнопку Test программа
Test.Exe в окне редактирования напишет текст: This is a
Test
Чтобы связать код с событием BN_CLICKED кнопки
Test, выполните следующие действия:
Выбирете ClassWizard в меню View
Выберете закладку Message Maps в панели
ClassWizard
Исползуйте диалоговую панель ClassWizard для выбора
следующего события: Class Name: CTestDlg Object ID:
IDC_TEST_BUTTON Messages: BN_CLICKED
Щелкните на кнопку Add Fucntion и в раскрывшемся окне
нажмите кнопку OK.
Нажмите кнопку Edit Code и напишите следующий код в
функции OnTestButton():
void CTestDlg::OnTestButton() { // TODO: Add your
control notification handler code here
////////Мой код начинается здесь///////////
///Присвоить переменной окна редактирования IDC_TEST_EDIT
значение This is a Test. m_TestEdit="This is a Test"; ////
Обновить экран UpdateData(FALSE);
////////Мой код заканчивается здесь///////////
}
Код, который вы ввели содержит два оператора:
Первый присваивает переменной m_TestEdit типа
CString значение This is a Test.
А второй оператор UpdateData(FALSE); обновляет экран,
т.е. сообщает переменным диалогового окна текущие их значения.
Связывание кода с событием BN_CLICKED
кнопки Clear
При нажатии на кнопку Clear программа
Test.Exe должна стирать текст из окна редактирования.
Чтобы связать код с событием BN_CLICKED кнопки
Clear, выполните следующие действия:
Выбирете ClassWizard в меню View
Выберете закладку Message Maps в панели
ClassWizard
Исползуйте диалоговую панель ClassWizard для выбора
следующего события: Class Name: CTestDlg Object ID:
IDC_CLEAR_BUTTON Messages: BN_CLICKED
Щелкните на кнопку Add Fucntion и в раскрывшемся окне
нажмите кнопку OK.
Нажмите кнопку Edit Code и напишите следующий код в
функции OnClearButton():
void CTestDlg::OnClearButton() { // TODO: Add your
control notification handler code here
Первый присваивает переменной m_TestEdit типа
CString значение NULL, т.е. окно редактирования не
будет содержать никакого текста.
А второй оператор UpdateData(FALSE); обновляет экран,
т.е. сообщает переменным диалогового окна текущие их значения. При
выполнении этого оператора весь текст из окна редактирования
удалится.
Теперь сохраните свою работу, выбрав Save All в меню
File.
Чтобы увидеть в действии код программы выполните и запустите
ее.
Напишите что-нибудь в окне редактирования.
Щелкните на кнопку Clear, вы видите что текст
стирается.
Теперь нажмите на кнопку Test в окне редактирования
появится текст This is a Test.
Если все это выполняется, значит вы совершенно правильно
связали события с кнопками Test и Clear.
Связывание кода с событием BN_CLICKED
флажка Visible
При включении флажка Visible программа
Test.Exe должна сделать окно редактирования невидимым, а
при выключении - наоборот.
Чтобы связать код с событием BN_CLICKED флажка
Visible, выполните следующие действия:
Выбирете ClassWizard в меню View
Выберете закладку Message Maps в панели
ClassWizard
Исползуйте диалоговую панель ClassWizard для выбора
следующего события: Class Name: CTestDlg Object ID:
IDC_VISIBLE_CHECK Messages: BN_CLICKED
Щелкните на кнопку Add Fucntion и в раскрывшемся окне
нажмите кнопку OK.
Нажмите кнопку Edit Code и напишите следующий код в
функции OnVisibleButton():
void CTestDlg::OnVsibleCheck() { // TODO: Add your
control notification handler code here
////////Мой код начинается здесь///////////
////Обновить значения переменных элементов
управления, ////(содержимое эрана передается переменным
элементов управления) UpdateData(TRUE); ///Если отметка
флажка Visible зделать окно редактирования видимым ///А
если нет - то
невидимым if(m_VisibleCheck==TRUE) GetDlgItem(IDC_TEST_EDIT)->ShowWindow(SW_SHOW); else GetDlgItem(IDC_TEST_EDIT)->ShowWindow(SW_HIDE);
////////Мой код заканчивается здесь///////////
}
Код который вы ввели содержит следующие операторы:
UpdateData(TRUE); - этот оператор обновляет значения
переменных элементов управления текущими значениями, которые
содержаться на экране. Т.е. при нажатии на флажок переменная может
принимать два значения TRUE или FALSE, TRUE -
это когда флажок включен, а FALSE - наоборот. Значит при
выполнении этого оператора переменная флажка управления принимаеит
текущее положение флажка и все остальные переменные обновляются
значениями, которые отображаются на экране.
Следующие оператор проверяет включен или выключен флажок. Если
он включен, то выполняется оператор
GetDlgItem(IDC_TEST_EDIT)->ShowWindow(SW_SHOW);, где
GetDlgItem(IDC_TEST_EDIT) извлекает указатель на элемент
управления, а функция ShowWindow(SW_SHOW); с параметром
SW_SHOW, делает окно редактирования видимым.
А если флажок не отмечен, то выполняется таже самая функция
ShowWindow(); с параметром SW_HIDE, этот параметр
означает спрятать окно редактирования.
Связывание кода с событием BN_CLICKED
флажка Visible
При включении флажка Enable программа
Test.Exe должна сделать окно редактирования доступным, а
при выключении - недоступным.
Чтобы связать код с событием BN_CLICKED флажка
Enable, выполните следующие действия:
Выбирете ClassWizard в меню View
Выберете закладку Message Maps в панели
ClassWizard
Исползуйте диалоговую панель ClassWizard для выбора
следующего события: Class Name: CTestDlg Object ID:
IDC_ENABLE_CHECK Messages: BN_CLICKED
Щелкните на кнопку Add Fucntion и в раскрывшемся окне
нажмите кнопку OK.
Нажмите кнопку Edit Code и напишите следующий код в
функции OnEnableButton():
void CTestDlg::OnEnableCheck() { // TODO: Add your
control notification handler code here
////////Мой код начинается здесь///////////
////Обновить значения переменных элементов
управления, ////(содержимое эрана передается переменным
элементов управления) UpdateData(TRUE); ///Если отметка
флажка Enable зделать окно редактирования видимым ///А
если нет - то
невидимым if(m_EnableCheck==TRUE) GetDlgItem(IDC_TEST_EDIT)->EnableWindow(SW_SHOW); else GetDlgItem(IDC_TEST_EDIT)->EnableWindow(SW_HIDE);
////////Мой код заканчивается здесь///////////
}
Код который вы ввели содержит следующие операторы:
UpdateData(TRUE) - обновляет переменные элементов
управления текущими их значениями на экране. После выполнения
этого оператора перменной m_EnableCheck присваивается
текущее значение флажка Enable.
Следующие операторы имееют ту же конструкцию, как и у флажка
Visible, но только функция ShowWindow заменена на
EnableWindow(), которая предназначена для того, чтобы
элемент управления был недоступен или доступен. Она имеет те же
параметры, что и функция ShowWindow.
Связывание кода с событием EN_CHANGE
окна редактирования
При вводе текста и его изменении в окне
редактирования, возникает событие EN_CHANGE. В нашей
программе при вводе слова CALCULATOR запускается
калькулятор, а при вводе Paint - графический редактор
Paint.
Чтобы связать код с событием EN_CHANGE окна
редактирования, выполните следующие действия:
Выбирете ClassWizard в меню View
Выберете закладку Message Maps в панели
ClassWizard
Исползуйте диалоговую панель ClassWizard для выбора
следующего события: Class Name: CTestDlg Object ID:
IDC_TEST_EDIT Messages: EN_CHANGE
Щелкните на кнопку Add Fucntion и в раскрывшемся окне
нажмите кнопку OK.
Нажмите кнопку Edit Code и напишите следующий код в
функции OnChangeTestEdit():
void CTestDlg::OnChangeTestEdit() { ... // TODO:
Add your control notification handler code here
////////Мой код начинается здесь///////////
///Обновить переменные UpdateData(TRUE); ///Содать
переменную типа CString, присвоить ей значение ///переменной
m_TestEdit и выполнить перевод символов в
верхний ///регистр. CString
UpperValue; UpperValue=m_TestEdit; UpperValue.MakeUpper();
///Если в окне редактирования напечатано PAINT
///запускается редактор PAINT и окно редактирования становится
пустым. if(UpperValue=="PAINT") { system("pbrush.exe"); m_TestEdit="
"; UpdateData(FALSE); }
///Если в окне редактирования напечатано CALCULATOR
///запускается калькулятор и окно редактирования становится
пустым. if(UpperValue=="CALCULATOR") { system("calc.exe"); m_TestEdit="
"; UpdateData(FALSE); }
////////Мой код заканчивается здесь///////////
}
Код который вы ввели содержит следующие операторы:
UpdateData(TRUE); обновляет переменную
m_TestEdit значением содержимого окна редактирования, при
каждом его изменении, так как окно редактирования связано с
событием EN_CHANGE.
Следующий оператор CString UpperValue; содает новую
переменную типа CString.
Затем переменной UpperValue приравнивается значение
переменной m_TestEdit, это можно сделать, так как они имеют
одинаковый тип.
Оператор UpperValue.MakeUpper(); переводит все символы
переменной UpperValue в верхний регистр.
Оператор if(UpperValue=="PAINT"); проверяет, если
введено ли слово PAINT, то выполняются следующие три
оператора: Первый system("pbrush.exe"); запускает
графический редактор, так как не указан явный путь к файлу, то
программа будет искать его в каталоге C:\WINDOWS.
Второй оператор m_TestEdit=""; присваивает переменной
окна редактирования значение NULL, а следующий оператор
UpadteData(FALSE) - обновляет экран. Вследствии этого, весь
текст из окна редактирования удалится.
Заметьте, что мы перевели символы переменной UpperValue
в верхний регистр - это нужно потому, что в языке С++
символы нижнего и верхнего регистра имеют разные значения, поэтому
при переводе на верхний регистр, мы 100% будем уверены, что
написанное нами слово PaInT совпадет с PAINT.
Следующая конструкция операторов полностью идеинтична
предыдущей, только проверяется равно ли значение переменной
m_TestEdit слову CALCULATOR, если да, то запускается
калькулятор, и окно редактирования очищается.
Вы закончили связывание событий с элементами управления