|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Создание обработчика для родительского окнаТеперь создадим обработчик сообщения для главного окна приложения, перехватывающего сообщения от самой операционной системы. Пусть, когда пользователь дважды щелкнет по клиентской области родительского окна самого приложения, должно появиться уведомление об этом. Здесь для доступа к таким сообщениям редактор дочерних элементов диалогового окна не поможет. · Откройте панель Class View командой View/Class View · Найдите класс CHelloDialogDlg, отвечающий за главное диалоговое окно, выделите его и раскройте вкладку Properties (Свойства) · На вкладке Properties вверху щелкните по пиктограмме Messages (Сообщения) В окне появятся два столбца с перечнем всех сообщений, для которых можно создать обработчики, и перечень имен всех уже созданных обработчиков. · Найдите и выделите сообщение WM_LBUTTONDBLCLK. Внизу окна появится краткий комментарий к выбранному сообщению.
· Добавьте через раскрывающийся список обработчик этого сообщения Среда сама создаст функцию-член CHelloDialogDlg::OnLButtonDblClk() со стандартным именем и добавит элемент карты сообщений, переадресующий сообщение WM_LBUTTONDBLCLK на вызов этой функции. Карта сообщений станет выглядеть так · Карта сообщений класса CHelloDialogDlg после регистрации обработчика· BEGIN_MESSAGE_MAP(CHelloDialogDlg, CDialog)· ON_WM_SYSCOMMAND()· ON_WM_PAINT()· ON_WM_QUERYDRAGICON()· //}}AFX_MSG_MAP· ON_BN_CLICKED(IDOK, &CHelloDialogDlg::OnBnClickedOk)· ON_WM_LBUTTONDBLCLK()END_MESSAGE_MAP()Обратите внимание, что среда не позволяет регистрировать обработчики родительского диалогового окна с произвольными именами, а назначает им стандартное имя. По этой причине в карте сообщений нет необходимости связывать для события конкретные элементы с конкретными обработчиками, как это требуется делать для дочерних элементов. Объявление функции-обработчика помещается в заголовочный файл диалогового окна и имеет вид Объявление обработчика в заголовочном файле HelloDialogDlg.hclass CHelloDialogDlg: public CDialog{.................................................public: // Содержимое текстового поля CString m_strText;public: afx_msg void OnBnClickedOk();public: afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);};Заготовка функции-обработчика щелчка по диалоговому окну, которую автоматически добавит среда, имеет вид Обработчик двойного щелчка на родительском диалоговом окне приложенияvoid CHelloDialogDlg::OnLButtonDblClk(UINT nFlags, CPoint point){ // TODO: Add your message handler code here and/or call default CDialog::OnLButtonDblClk(nFlags, point);}· Скорректируйте заготовку обработчика события родительского диалогового окна так · Обработчик двойного щелчка на родительском диалоговом окне приложения· void CHelloDialogDlg::OnLButtonDblClk(UINT nFlags, CPoint point)· {· // TODO: Add your message handler code here and/or call default· CString mess;· mess = "Вы выполнили двойной щелчок \n"· "по клиентской области диалогового окна";· CString title;· title = "Это заголовок окна сообщения";· MessageBox(mess, title, MB_ICONSTOP); · · CDialog::OnLButtonDblClk(nFlags, point);}· Постройте приложение, которое после двойного щелчка по клиентской области будет иметь вид
Итак, для каждого добавленного обработчика сообщений среда генерирует код в трех места: 1. Объявление в заголовочном файле.h 2. Определение в файле.cpp 3. Внесение записи в карту сообщений файла.cpp o Постройте приложение и проверьте его работоспособность
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |