Dialog API 1.0
Внимание!
DialogAPI выделен в отдельное API, начиная с версии FAR Manager 1.70. Что
это значит для плагинописателей? Самое главное - максимальный контроль над
созданным диалогом.
Различаются два типа диалогов:
- Диалоги так называемого About стиля (времен FAR 1.65 и ниже)
- Диалоги Extended стиля - те, которые используют функцию-обработчик диалога.
Независимо от стиля, Менеджер диалогов версии 1.0 поддерживает только так
называемые Модальные Диалоги (Modal Dialog). Модальный диалог
представляет собой окно, запрещающее пользователю взаимодействовать с любым
объектом FAR Manager вне данного диалога. Модальный диалог отсекает поток
сообщений, идущих от мыши или клавиатуры к другим объектам FAR Manager.
About стиль
Здесь все просто - НЕУПРАВЛЯЕМЫЕ ДИАЛОГИ! Такие диалоги получаются при вызове
функции
Dialog или
DialogEx
с параметром
DlgProc, равным NULL.
Данный стиль предполагает следующее поведение диалога:
- о любых изменениях в состоянии управляющих элементов плагин узнает только
после выхода из диалога;
- выход из диалога происходит, когда пользователь нажал одну из клавиш:
Esc, Ctrl-Enter, Enter
(нажатие Enter приводит к выходу из диалога на любом
элементе, кроме строк редактирования, объединенных флагом
DIF_EDITOR),
или кликнул кнопкой мыши за пределами диалога;
- данный стиль предназначен для простых диалогов.
Extended стиль
А вот это... это самое интересное! Плагин полностью управляет поведением
диалога:
- диалог имеет функцию-обработчик, которая реагирует на массу событий,
приходящих от Менеджера диалогов;
- функция-обработчик общается с Менеджером Диалогов путем посылки
сообщений, используя функцию
SendDlgMessage;
- функция-обработчик может передать управление Менеджеру Диалогов используя
функцию DefDlgProc;
- если пользователь пытается взаимодействовать с недоступными объектами
FAR Manager, нажимая на кнопки мыши вне диалога, то Менеджер Диалогов
предупреждает гудком;
- окончанием обработки диалога управляет плагин.
- данный стиль предназначен для диалогов со сложной логикой взаимодействия с
пользователем.
Если в обработчике диалога просто передать управление ядру посредством
функции
DefDlgProc, то получим... тот же About-стиль:
// минимальный обработчик диалога
LONG_PTR WINAPI MyDlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)
{
return Info.DefDlgProc(hDlg,Msg,Param1,Param2);
}
Критерии выбора стиля диалога просты:
- создаем диалог для ввода одной строки (типа
InputBox) -
выбираем простой стиль (About) - проще программа, меньше написанного кода, меньше
ошибок;
- создаем Game-Plugin, Калькулятор или плагин взаимодействующий с
базой данных через ODBC - выбираем Extended стиль - сложная логика,
динамика, интерактивное взаимодействие с пользователем, от действий которого
зависит дальнейшая обработка, etc...
Итак. Dialog API версии 1.0:
Примечание
Для ознакомления с Dialog API рекомендуется изучить файл
dialog.cpp
из плагина
"
Reversi".
Смотрите также: