DialogInit

Programming Far Manager plugins

DialogInit

Функция DialogInit инициализирует диалог, для последующего показа на экране функцией DialogRun.
HANDLE WINAPI DialogInit(
  const GUID* PluginId,
  const GUID* Id,
  intptr_t X1,
  intptr_t Y1,
  intptr_t X2,
  intptr_t Y2,
  const wchar_t *HelpTopic,
  const struct FarDialogItem *Item,
  size_t ItemsNumber,
  intptr_t Reserved,
  FARDIALOGFLAGS Flags,
  FARWINDOWPROC DlgProc,
  void *Param
);

Параметры

PluginId
Указатель на GUID плагина (для вашего плагина, GUID должен быть таким же, что и в поле GlobalInfo.Guid функции GetGlobalInfoW).
Id
Указатель на GUID диалога. GUID должен быть уникальным.
X1, Y1, X2, Y2
Геометрия диалога. Задайте эти координаты непосредственно или воспользуйтесь формулой "Width x Height" - для этого установите X1 и Y1 в -1, при этом X2 - ширина и Y2 - высота диалога. В последнем случае при выводе на экран диалог будет автоматически центрироваться. Параметры X2 и Y2 не могут быть меньше нуля.
HelpTopic
Тема подсказки связанная с данным диалогом. Если подсказка не используется, то установите этот параметр в NULL.
Item
Указатель на массив структур FarDialogItem. Каждая структура описывает пункт диалога.
ItemsNumber
Количество элементов массива FarDialogItem.
Reserved
Зарезервировано. Должно быть рано 0.
Flags
Набор флагов, уточняющих некоторые параметры диалога. Может быть комбинацией следующих значений (тип FARDIALOGFLAGS):
ФлагОписание
FDLG_WARNING Задаёт для диалога цветовую схему "Предупреждение".
FDLG_SMALLDIALOG Позволяет создавать диалоги с уменьшенным размером рамки. Для таких диалогов при отрисовке разделительных линий (DIF_SEPARATOR) предполагается нулевой отступ между границей диалога и окружающей его двойной рамкой.
FDLG_NODRAWSHADOW Не рисовать тень диалога.
FDLG_NODRAWPANEL Не рисовать поле диалога.
FDLG_KEEPCONSOLETITLE Отключить установку заголовка консоли Far Manager по заголовку диалога.
FDLG_NONMODAL Создать немодальный диалог. Диалог отображается сразу и сам освобождается при закрытии. Вызывать DialogRun и DialogFree для такого диалога не нужно.
FDLG_NONE Нулевой флаг.
DlgProc
Указатель на функцию-обработчик диалогового окна типа FARWINDOWPROC.
Param
Данные, которые обработчик диалога получит в сообщении DN_INITDIALOG

Возвращаемое значение

Функция возвращает созданный описатель диалога, либо INVALID_HANDLE_VALUE в случае ошибки.
После закрытия диалога и получения нужных данных, созданный описатель диалога необходимо освободить в функции DialogFree.

Замечания

  1. Массив элементов Item не корректируется в процессе работы пользователя с этим диалогом, он необходим только для построения самого диалога. Far Manager перед созданием диалога преобразует элементы Item во внутреннее представление.

Пример

// {B66C436D-E657-419C-86D3-6834B9ACF3D2}
DEFINE_GUID(MainGuid, 0xb66c436d, 0xe657, 0x419c, 0x86, 0xd3, 0x68, 0x34, 0xb9, 0xac, 0xf3, 0xd2);

// {F6BFA9FC-B2B9-4354-AE47-8FECF59FE65F}
DEFINE_GUID(DialogGuid, 0xf6bfa9fc, 0xb2b9, 0x4354, 0xae, 0x47, 0x8f, 0xec, 0xf5, 0x9f, 0xe6, 0x5f);

HANDLE hDlg = Info.DialogInit(&MainGuid;,&DialogGuid;, -1,-1,76,10, L"TempCfg",DialogItems,sizeof(DialogItems)/sizeof(DialogItems[0]), 0,0,DlgProc,0);
if (hDlg != INVALID_HANDLE_VALUE)
{
  int ExitCode=Info.DialogRun(hDlg);
  if (ExitCode == 1) // вышли по Ок
  {
    // различные вызовы Info.SendDlgMessage() для получения нужных выходных данных из диалога
  }
  Info.DialogFree(hDlg);
  if (ExitCode == 1)
    return(TRUE);
}
return(FALSE);
Смотрите также: