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