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

11
MFC: СОБЫТИЙНОЕ ПРОГРАММИРОВАНИЕ Mihail Croitor

Upload: mcroitor

Post on 15-Jun-2015

336 views

Category:

Education


6 download

DESCRIPTION

понятие событийного программирования. обработка сообщений в MFC

TRANSCRIPT

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

MFC: СОБЫТИЙНОЕ ПРОГРАММИРОВАНИЕ

Mihail Croitor

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

Содержание

События Обработка событий Карта сообщений Типы событий в MFC Добавление обработчиков событий в MFC

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

Событие

Событие – изменение состояния информационной системы.

Типы событий: Внешние

Пользовательские Системные

Внутренние Понятие события тесно связано с понятием

сообщения – индикатора о происшествии события

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

Обработка событий:понятия

Приложение, управляемое событиями, содержит: Очередь событий – последовательность событий,

предназначенных приложению для обработки Обработчики событий – функции, вызываемые как

реакция на произошедшее событие Событийный цикл – цикл, связывающий событие с

его обработчиком

Page 5: 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

}

Диспетчеризация события

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

Обработка событий:событийный цикл в MFC

while (GetMessage(&msg, (HWND) NULL, 0, 0)) {

if (TranslateAccelerator(hwndMain, haccl, &msg) == 0){

TranslateMessage(&msg);DispatchMessage(&msg);

}

}

Извлечение события из очереди

Диспетчеризация события

Обработка нажатия виртуальных клавиш

Обработка нажатия «горячих» клавиш

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

Обработка событий:карта сообщений

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$

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

Типы событий в MFC

Сообщения-команды – сообщения, которые генерируют элементы меню и горячие клавиши.

Сообщения операционной системы – сообщения, отвечающие за обновления пользовательского интерфейса

Пользовательские сообщения – сообщения, определенные пользователем

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

Типы событий в MFC:сообщения-команды

Определяются макросом ON_COMMAND(id, pFn), где id - идентификатор события, pFn – указатель на функцию –обработчик.

Примеры: ON_COMMAND(ID_FILE_OPEN, OnFileOpen) ON_COMMAND_RANGE(ID_MENU1,

ID_MENU5, OnMenuSelected)

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

Типы событий в MFC:Сообщения ОС

Обновление UI приложения: ON_UPDATE_COMMAND_UI(id, pFn)

Обработка сообщений от элементов управления: ON_<EVENT> - где <EVENT> - событие ОС.

Пример: ON_BN_CLICKED(IDC_OK, OnOk) // событие

WM_BN_CLICKED

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

Типы событий в MFC:пользовательские сообщения

Любое сообщение (в частности, определенное пользователем) может быть связано с обработчиком макрокомандой ON_MESSAGE(idMsg, pFn)

Идентификатор сообщения определяется через WM_USER (зарезервированное пространство идентификаторов): #define PM_DECIMAL WM_USER + 0 #define PM_BINARY WM_USER + 1