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


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


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

  1. Вновь откройте шаблон диалога и установите курсор мыши в окно IDC_FIND.
  2. В окне Properties нажмите кнопку с подсказкой ControlEvents.
  3. В появившемся списке уведомляющих сообщений, которые генерирует окно редактирования, выберите сообщение 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++);



Начало  Назад  Вперед