Иллюстрированный самоучитель по Visual Studio.Net




Реакция окна на уведомляющие сообщения - часть 4


Введем эти элементы в состав класса позже, а сейчас дадим оценку того, что только что сделали. С помощью ClassWizard мы ввели в класс главного окна обработку уведомляющего сообщения UDN_DELTAPOS, работающего по схеме WM_NOTIFY. Теперь введем обработку сообщения EN_CHANGE, поступающего от окна редактирования IDC_FIND каждый раз, когда в нем происходят изменения. Это сообщение работает по старой схеме и не влечет за собой необходимости преобразовывать указатели на структуры данных.

  • Вновь откройте шаблон диалога и установите курсор мыши в окно IDC_FIND.
  • В окне Properties нажмите кнопку с подсказкой ControlEvents.
  • В появившемся списке уведомляющих сообщений, которые генерирует окно редактирования, выберите сообщение EN_CHANGE и его реализацию <Add>.

    Проверьте результаты работы ClassWizard. Они должны быть видны в трех разных местах вашего приложения. В файле LookDlg.h должен появиться прототип функции обработки

    void OnChangeFind (void) ;

    в файле LookDlg.cpp должен появиться новый элемент карты сообщений

    ON_EN_CHANGE(IDC_FIND, OnChangeFind)

    и заготовка тела функции обработки, в которую мы должны внести свою функциональность:

    void CLookDlg::OnChangeFind(void)

    {

    // TODO: Если это RICHEDIT control, то он не пошлет

    // уведомления пока вы не дадите своей версии функции

    // CDialog::OnInitDialog() и не сделаете вызов функции

    // CRichEditCtrl().SetEventMask() с флагом ENM_CHANGE,

    // включенным с помощью операции побитового ИЛИ.

    // TODO: Здесь вставьте код обработки уведомления.

    }

    В комментариях CLassWizard предупреждает нас о том, что с элементом типа Rich Edit control надо работать по особым правилам. К нам это не относится, поэтому уберите комментарии и вставьте вместо них такой код:

    CString s;

    //==== Выбираем код ошибки, введенный пользователем

    GetDlgltemText(IDC_FIND, s) ;

    //==== Преобразуем к типу string, с которым мы работаем

    string find = s;

    //==== Ищем код в контейнере

    m_Vector

    for (int n=0;

    n < m_nltems is find != m_Vector[n].Code;n++);



    Содержание  Назад  Вперед