# DN_CONTROLINPUT

Обработчик диалога получает событие `DN_CONTROLINPUT`, когда пользователь нажал клавишу клавиатуры или мыши.

### Param1

ID элемента (обычно элемент, имеющий фокус ввода) диалога. `-1` для случая, если пользователь кликнул клавишей мыши вне диалога.

### Param2

Указатель на структуру INPUT_RECORD описывающую клавишу.

### Return

`TRUE` - клавишу обработали сами.
`FALSE` - пусть обрабатывает клавишу стандартный внутренний обработчик диалога.

### Элементы

Элемент | Описание
--- | ---
Все | Все элементы диалога, кроме скрытых и недоступных.

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

1. По умолчанию для открытого DI_COMBOBOX событие `DN_CONTROLINPUT` в диалоговую процедуру не приходит. Воспользуйтесь сообщением DM_SETCOMBOBOXEVENT, чтобы включить режим посылки нажатий клавиш в диалоговую процедуру.
2. Для элемента DI_USERCONTROL координаты курсора (0,0) мыши начинаются с левого-верхнего угла этого элемента. Для остальных элементов - относительно левого верхнего угла экрана.
3. Если пользователь кликнул клавишей мыши вне диалога, то:
   - левая клавиша рассматривается как нажатие клавиши `Esc`;
   - правая клавиша рассматривается как нажатие клавиши `Enter`;
   - прочие клавиши (для многокнопочной мыши) не имеют никакого эффекта.
   - если функция диалога не обрабатывает событие с `Param1 = -1`, то диалог будет закрыт.

### Пример

Пример обработки сообщения:

    // вызвать контекстную справку
    case DN_CONTROLINPUT:
      const INPUT_RECORD* record=(const INPUT_RECORD *)Param2;
      if (record->EventType==KEY_EVENT && record->Event.KeyEvent.bKeyDown)
      {
        WORD Key=record->Event.KeyEvent.wVirtualKeyCode;
        if (Key==VK_F1)
        {
          Info.ShowHelp(Info.ModuleName, 0, 0);
          return true;
        }
      }

Смотрите также:
DialogInit, DM_KEY