3. Событие
Событие – изменение состояния
информационной системы.
Типы событий:
Внешние
Пользовательские
Системные
Внутренние
Понятие события тесно связано с понятием
сообщения – индикатора о происшествии
события
4. Обработка событий:
понятия
Приложение, управляемое событиями,
содержит:
Очередь событий – последовательность событий,
предназначенных приложению для обработки
Обработчики событий – функции, вызываемые как
реакция на произошедшее событие
Событийный цикл – цикл, связывающий событие с
его обработчиком
5. Обработка событий:
пример событийного цикла
while(true)
{
// get event from queue
evt = GetEvent();
// start dispatch
switch(evt)
{
case EVENT1: DoSmth1(); break;
case EVENT2: DoSmth2(); break;
case EVENT3: DoSmth3(); break;
case EVENT4: DoSmth4(); break;
}
// end dispatch
}
Диспетчеризация
события
6. Обработка событий:
событийный цикл в MFC
while (GetMessage(&msg, (HWND) NULL, 0, 0))
{
if (TranslateAccelerator(hwndMain, haccl, &msg) == 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Извлечение события из очереди
Диспетчеризация события
Обработка нажатия
виртуальных клавиш
Обработка нажатия
«горячих» клавиш
7. Обработка событий:
карта сообщений
BEGIN_MESSAGE_MAP(CTrysdi2App, CWinApp)
//{{AFX_MSG_MAP(CTrysdi2App)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
//}}AFX_MSG_MAP
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN,
CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP,
CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
Карта сообщений связывает
событие с его обработчиком
Макрокоманды между комментариями
//{{AFX_MSG_MAP(CTrysdi2App)
и //}}AFX_MSG_MAP
Генерируются M$ V$
8. Типы событий в MFC
Сообщения-команды – сообщения, которые
генерируют элементы меню и горячие клавиши.
Сообщения операционной системы –
сообщения, отвечающие за обновления
пользовательского интерфейса
Пользовательские сообщения – сообщения,
определенные пользователем
9. Типы событий в MFC:
сообщения-команды
Определяются макросом ON_COMMAND(id,
pFn), где id - идентификатор события, pFn –
указатель на функцию –обработчик.
Примеры:
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND_RANGE(ID_MENU1,
ID_MENU5, OnMenuSelected)
10. Типы событий в MFC:
Сообщения ОС
Обновление UI приложения:
ON_UPDATE_COMMAND_UI(id, pFn)
Обработка сообщений от элементов
управления: ON_<EVENT> - где <EVENT> -
событие ОС.
Пример:
ON_BN_CLICKED(IDC_OK, OnOk) // событие
WM_BN_CLICKED
11. Типы событий в MFC:
пользовательские сообщения
Любое сообщение (в частности, определенное
пользователем) может быть связано с
обработчиком макрокомандой
ON_MESSAGE(idMsg, pFn)
Идентификатор сообщения определяется через
WM_USER (зарезервированное пространство
идентификаторов):
#define PM_DECIMAL WM_USER + 0
#define PM_BINARY WM_USER + 1