# 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);

Смотрите также:
DialogRun, DefDlgProc, SendDlgMessage, сервисные функции, Message