Код, инициализирующий окно редактирования
- При запуске программы, основанную на диалоге, вам нужно установить
определенные значения некоторых элементов управления. Вам необходимо,
чтобы флажки Visible и Enable были отмечены, иначе окна
редактирования не будет видно. Для этого выполните следующие действия:
- Зайдите в View->ClassWizard,откройте закладку Message
Maps.
- В Message IDs выберете CTestDlg, в Messages
появится список событий, с которыми может быть связано диалоговое окно.
Выберете там событие WM_INITDIALOG. Оно происходит, когда
запускается программа и инициализируется диалоговое окно.
- Щелкнете на кнопку Add Function, а затем нажмите на кнопку
Edit Code, для редактирования иходного кода.
- Функция OnInitDialog() уже содержит часть кода написанного
VC++ Найдите в нем коментарий // TODO: Add extra
initialization here, который сообщает нам, что после него мы можем
добавить свой код.
- Напишите следующий код в функции OnInitDialog():
BOOL
CTestDlg::OnInitDialog() { CDialog::OnInitDialog(); ... ... ...
//
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
////////Мой код начинается здесь///////////
///Присвоить переменной окна редактирования IDC_TEST_EDIT значение
NULL. m_TestEdit=" "; //// Обновить
экран UpdateData(FALSE);
////////Мой код заканчивается здесь///////////
}
- Код, который вы ввели содержит два оператора:
- Первый присваивает переменной 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 - это когда флажок
включен, а FASLE - наоборот. Значит при выполнении этого
оператора переменная флажка управления принимаеит текущее положение
флажка и все остальные переменные обновляются значениями, которые
отображаются на экране.
- Следующие оператор проверяет включен или выключен флажок. Если он
включен, то выполняется оператор
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, если да, то запускается калькулятор, и окно
редактирования очищается.
Вы закончили связывание событий с элементами управления
Резюме и упражнение
Оглавление ->
Страница 5 ->
|