Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Программирование -> C / C++ -> Уроки программирования на Visual C++ с помощью MFC


LESSON 2

Связывание событий с элементами управления

    Код, инициализирующий окно редактирования

  • При запуске программы, основанную на диалоге, вам нужно установить определенные значения некоторых элементов управления. Вам необходимо, чтобы флажки 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 ->



 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.