SlideShare a Scribd company logo
1 of 11
MFC: СОБЫТИЙНОЕ
ПРОГРАММИРОВАНИЕ
Mihail Croitor
Содержание
 События
 Обработка событий
 Карта сообщений
 Типы событий в MFC
 Добавление обработчиков событий в MFC
Событие
 Событие – изменение состояния
информационной системы.
 Типы событий:
 Внешние
 Пользовательские
 Системные
 Внутренние
 Понятие события тесно связано с понятием
сообщения – индикатора о происшествии
события
Обработка событий:
понятия
 Приложение, управляемое событиями,
содержит:
 Очередь событий – последовательность событий,
предназначенных приложению для обработки
 Обработчики событий – функции, вызываемые как
реакция на произошедшее событие
 Событийный цикл – цикл, связывающий событие с
его обработчиком
Обработка событий:
пример событийного цикла
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
}
Диспетчеризация
события
Обработка событий:
событийный цикл в 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 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$
Типы событий в 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

More Related Content

More from mcroitor

09 server mgmt_ii_ru
09 server mgmt_ii_ru09 server mgmt_ii_ru
09 server mgmt_ii_rumcroitor
 
10 server security_ro
10 server security_ro10 server security_ro
10 server security_romcroitor
 
10 server security_ru
10 server security_ru10 server security_ru
10 server security_rumcroitor
 
08 server mgmt_ro
08 server mgmt_ro08 server mgmt_ro
08 server mgmt_romcroitor
 
08 server mgmt_ru
08 server mgmt_ru08 server mgmt_ru
08 server mgmt_rumcroitor
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_rumcroitor
 
07 virtual hosts_ro
07 virtual hosts_ro07 virtual hosts_ro
07 virtual hosts_romcroitor
 
06 php instalation_ro
06 php instalation_ro06 php instalation_ro
06 php instalation_romcroitor
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_rumcroitor
 
05 db server_deployment_ro
05 db server_deployment_ro05 db server_deployment_ro
05 db server_deployment_romcroitor
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_rumcroitor
 
04 web server_deployment_ro
04 web server_deployment_ro04 web server_deployment_ro
04 web server_deployment_romcroitor
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_rumcroitor
 
03 web server_architecture_ro
03 web server_architecture_ro03 web server_architecture_ro
03 web server_architecture_romcroitor
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_rumcroitor
 
02 server hardware_ro
02 server hardware_ro02 server hardware_ro
02 server hardware_romcroitor
 
02 server hardware_ru
02 server hardware_ru02 server hardware_ru
02 server hardware_rumcroitor
 
01 server definition_ro
01 server definition_ro01 server definition_ro
01 server definition_romcroitor
 
01 server definition
01 server definition01 server definition
01 server definitionmcroitor
 
0.0 particularitatile programarii с++
0.0 particularitatile programarii с++0.0 particularitatile programarii с++
0.0 particularitatile programarii с++mcroitor
 

More from mcroitor (20)

09 server mgmt_ii_ru
09 server mgmt_ii_ru09 server mgmt_ii_ru
09 server mgmt_ii_ru
 
10 server security_ro
10 server security_ro10 server security_ro
10 server security_ro
 
10 server security_ru
10 server security_ru10 server security_ru
10 server security_ru
 
08 server mgmt_ro
08 server mgmt_ro08 server mgmt_ro
08 server mgmt_ro
 
08 server mgmt_ru
08 server mgmt_ru08 server mgmt_ru
08 server mgmt_ru
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_ru
 
07 virtual hosts_ro
07 virtual hosts_ro07 virtual hosts_ro
07 virtual hosts_ro
 
06 php instalation_ro
06 php instalation_ro06 php instalation_ro
06 php instalation_ro
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_ru
 
05 db server_deployment_ro
05 db server_deployment_ro05 db server_deployment_ro
05 db server_deployment_ro
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
 
04 web server_deployment_ro
04 web server_deployment_ro04 web server_deployment_ro
04 web server_deployment_ro
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_ru
 
03 web server_architecture_ro
03 web server_architecture_ro03 web server_architecture_ro
03 web server_architecture_ro
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_ru
 
02 server hardware_ro
02 server hardware_ro02 server hardware_ro
02 server hardware_ro
 
02 server hardware_ru
02 server hardware_ru02 server hardware_ru
02 server hardware_ru
 
01 server definition_ro
01 server definition_ro01 server definition_ro
01 server definition_ro
 
01 server definition
01 server definition01 server definition
01 server definition
 
0.0 particularitatile programarii с++
0.0 particularitatile programarii с++0.0 particularitatile programarii с++
0.0 particularitatile programarii с++
 

mfc событийное программирование

  • 2. Содержание  События  Обработка событий  Карта сообщений  Типы событий в MFC  Добавление обработчиков событий в MFC
  • 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