Сегодня мы продолжим знакомится с обработчиками сообщений. В прошлый раз мы создавали его вручную. Но в Visual C++ не всё так сильно запущено, есть средство помогающее автоматизировать этот процесс. Сегодня мы с ним познакомимся.
Создай новый проект через MFC APP Wizard. На первом же шаге выбери пункт Dialog based (рис 1). Остальное нас не интересует, поэтому можешь сразу жать Finish.
Рис 1. Первый шаг App Wizard
Перед тобой сразу же откроется окно для визуального редактирования главной формы. Поставь на форму кнопку. Теперь, чтобы создать обработчик OnClick для этой кнопки достаточно дважды щёлкнуть по ней. Перед тобой откроется маленькое окошко, в котором попросят ввести имя процедуры, которая будет отвечать за событие OnClick по этой кнопке (рис 2). Стоит только нажать "ОК" и Visual C++ сама пропишет всё, что нужно и создаст функцию.
Рис 2. Создание обработчика события двойным щелчком
Я нажал "Cancel", потому что хочу пойти другим путём. А вдруг мне понадобится другое событие от кнопки или другого компонента, который я поставлю. Лучше щёлкни по кнопке правой кнопкой и выбери пункт Properties. В появившемся окне, в поле Caption измени заголовок кнопки на "Нажми меня". Теперь посмотри на поле ID, там написано IDC_BUTTON1. Это идентификатор твоей кнопки. Через него ты будешь обращатся к ней и изменять её свойства.
Теперь создадим обработчик. Щёлкни View->ClassWizard и ты увидешь окно, как на рис 3.
Рис 3. ClassWizard
Вверху окна, слева, есть выпадающий список Project. В нём ты выбираешь проект с которым хочешь работать. Пока все примеры у нас состоят из одного проекта, поэтому там выбирать нечего. Правее есть выпадающий список Class Name. В нём ты выбираешь класс (окно), для которого хочешь создать обработчик события. Мы создаём для главного окна, поэтому у нас должно гореть CMeDlg (Это моё главное окно, у тебя оно может называться по другому).
В списке слева, ты выбираешь объект, для которого хочешь создать обработчик события. Мы создаём событие для кнопки, поэтому выдели IDC_BUTTON1. Справа перечислены события, которые можно обработать для этого объекта. Выбери BN_CLICKED, это аналог OnClick из Delphi.
Теперь щёлкни по кнопке Add Function и тебе предложат ввести имя будущего обработчика. Я оставил значение по умолчанию. Так что дави "OK". Теперь нажми пимпу "Edit Code" и Visual C++ перенесёт тебя экспресом в созданный обработчик. Напиши в нём следующее:
void CMeDlg::OnButton1()
{
// TODO: Add your control notification handler code here
AfxMessageBox( "Ты щёлкнул по мне" );
}
Запусти программу (Ctrl+F5) и щёлкни по кнопке.
Теперь давай создадим обработчик для щёлканья по форме, только на этот раз с помощью ClassWizard. Запусти его (View->ClassWizard). "Class Name" должен остаться CMeDlg, В "Object IDs" тоже выбери CMeDlg, это позволит тебе выбирать в списке Messages сообщения твоего главного диалогового окна. Найди в нём сообщение WM_LBUTTONDBLCLK (сообщения от двойного щелчка левой кнопкой).
Рис 4. ClassWizard
Теперь нажми "Add function" а затем "Edit Code". В качестве кода напишем следующее.
void CMeDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
AfxMessageBox("Ты щёлкнул по мне");
CDialog::OnLButtonDblClk(nFlags, point);//Вызов предка
}
Первой строкой я вывожу уже знакомое окно. Вторая строка вызывает процедуру обработчик этого же сообщения объекта предка (CDialog).