# DI_USERCONTROL

Свобода выбора! Элемент диалога `DI_USERCONTROL` описывает элемент управления, определяемый программистом: отрисовка, реагирование на события и прочие операции с элементом - всё это возлагается "на хрупкие плечи" плагина.

    struct FarDialogItem
    {
      enum FARDIALOGITEMTYPES Type = DI_USERCONTROL
      intptr_t X1                  = X1
      intptr_t Y1                  = Y1
      intptr_t X2                  = X2
      intptr_t Y2                  = Y2
      struct FAR_CHAR_INFO *VBuf   = виртуальный буфер отрисовки
      FARDIALOGITEMFLAGS Flags     = Flags
      const wchar_t *Data          = User Defined
    };

Внимание!

- Приведено схематичное изображение структуры; полное описание структуры см. здесь.

### Виртуальный буфер отрисовки

Параметр `VBuf` задаёт адрес виртуального буфера типа FAR_CHAR_INFO.

Если значение `VBuf = NULL`, то это значит, что плагин сам должен отрисовывать элемент `DI_USERCONTROL` после прихода события DN_DRAWDLGITEM, используя сервисную функцию Text.

Если `VBuf != NULL`, то Менеджер Диалогов считает, что это адрес буфера типа FAR_CHAR_INFO. Здесь обработчик диалога, в ответ на событие DN_DRAWDLGITEM, должен отрисовать этот элемент в виртуальный буфер, после чего Менеджер Диалогов выдаст содержимое `VBuf` на экран.

### Флаги

Для элемента `DI_USERCONTROL` имеют значения следующие флаги:

Флаг | Описание
--- | ---
DIF_NOFOCUS | управляющий элемент не получает клавиатурный фокус ввода
DIF_DISABLE | элемент является недоступным

### События

Событие | Описание
--- | ---
DN_DRAWDLGITEM | начало отрисовки элемента
DN_CONTROLINPUT | нажали клавиатурную клавишу или кликнули клавишей мыши
DN_KILLFOCUS | элемент потерял фокус (при условии, что не используется флаг DIF_NOFOCUS)
DN_GOTFOCUS | элемент получил фокус (при условии, что не используется флаг DIF_NOFOCUS)

### Замечания

1. Замечания по работе с курсором см. в описании сообщений DM_GETCURSORPOS или DM_SETCURSORPOS.

Смотрите также:
FarDialogItem