Обработка событий в отображаемом элементе
Файл заголовка docview.h предусматривает ряд макрокоманд для
таблицы реакции, а также функции обработки и проверки типов. С
помощью NOTIFY_SIG и VN_DEFINE вы можете также определить собственные функции и события.
Имеется ряд предопределенных событий Doc/View. Каждое такое
событие имеет соответствующую макрокоманду таблицы реакции и сигнатуру функции-обработчика. Модель Dec/View не предусматривает
версий этих функций. Вы должны определить эти функции в своем
производном классе и задать соответствующие действия.
EV_VN_VIEWOPENED | Построение нового отображаемого элемента. |
EV_VN_VIEWCLOSED | Уничтожение нового отображаемого элемента. |
EV_VN_DOCOPENED | Открытие нового документа. |
EV_VN_DOCCLOSED | Закрытие нового документа. |
EV_VN_COMMIT | Изменения, внесенные в данные в отображаемом элементе должны быть зафиксированы в документе. |
EV_VN_REVERT | Изменения, внесенные в данные в отображаемом элементе должны быть отменены. |
EV_VN_ISDIRTY | Если изменения еще не зафиксированы в документе, следует возвратить True, иначе False. |
EV_VN_ISWINDOWS | Если параметр HWND совпадает с HWND окна отображаемого элемента, следует возвратить True. |
Для генерации собственных событий отображаемых элементов и
определения соответствующих макрокоманд и функций обработки событий таблицы реакции вы можете использовать макрокоманды VN_DEFINE
и NOTIFY_SIG.
Во-первых, нужно определить имя события, которое вы хотите
обрабатывать. По соглашению оно должно начинаться с vn. Для задания сигнатуры функции обработки события используйте макрокоманду
NOTIFY_SIG, а для определения самой макрокоманды - VN_DEFINE. Эта
макрокоманда имеет три параметра: имя события, имя функции обработки события и размер параметра для функции обработки события.