Навигация:
<< >> Оглавление Указатель

Приложения

Приложение А. Функции, константы и структуры RDS

А.2. События блока и связанные с ними описания

А.2.6. События пользовательского интерфейса и рисования внешнего вида блоков

А.2.6.7. RDS_BFM_KEYDOWN – нажатие клавиши

Поток, в котором вызывается функция модели

Главный поток RDS.

Первый параметр функции модели (int CallMode)

Константа RDS_BFM_KEYDOWN.

Третий параметр функции модели (void *ExtParam)

Указатель на структуру описания события RDS_KEYDATA.

Возвращаемое функцией модели значение

RDS_BFR_DONE Нажатие клавиши не обработано блоком.
RDS_BFR_STOP Нажатие клавиши обработано, его не нужно передавать в остальные блоки подсистемы и вызывать соответствующий ей пункт главного меню RDS, если такой имеется.

Примечания

Реакция на событие RDS_BFM_KEYDOWN вызывается при нажатии какой-либо клавиши клавиатуры в том случае, если одновременно выполняются следующие условия:

В режимах моделирования и расчета при нажатии клавиши поочередно (в произвольном порядке) вызываются модели всех блоков активного окна подсистемы, для которых разрешена реакция на клавиатуру. В параметре ExtParam при этом передается указатель на структуру RDS_KEYDATA, в которой содержится описание нажатой клавиши. Если функция модели вернет константу RDS_BFR_DONE, нажатие клавиши будет считаться не обработанным, и вызовется модель следующего блока; если же она вернет RDS_BFR_STOP, перебор моделей блоков будет прекращен, кроме того, если нажатая клавиша соответствует какому-либо пункту меню RDS, этот пункт не будет вызван. Если ни одна из моделей блоков подсистемы не вернула RDS_BFR_STOP, будет вызвана модель самой подсистемы для реакции на событие RDS_BFM_WINDOWKEYDOWN. Если и модель подсистемы не сообщит об успешной обработке нажатия клавиши, нажатие будет обработано RDS (вызовется пункт главного меню, которому соответствует эта клавиша, если такой пункт есть). Реакция блоков на нажатие и отпускание клавиш подробно рассмотрена в §2.12.4 руководства программиста.

В режиме редактирования модели блоков не могут реагировать на нажатия клавиш. Единственный способ связать вызов модели блока с нажатием клавиши или сочетания клавиш в режиме редактирования – это зарегистрировать дополнительный пункт системного меню функцией rdsRegisterMenuItem и связать с ним «горячую клавишу».

Для описания нажатой клавиши служит структура RDS_KEYDATA (она используется и в других событиях реакции на клавиатуру):

  typedef struct {
     KeyCode;     // Виртуальный код клавиши
     Repeat;          // Признак автоповтора
     RepeatCount; // Число повторений
     Shift;          // Флаги клавиатуры (RDS_M*, RDS_K*)
     KeyEvent;    // Событие - RDS_BFM_KEYDOWN или
                          // RDS_BFM_KEYUP
     Handled;         // Событие обработано (возврат)
     Viewport;    // Устаревшее, больше не используется
  } RDS_KEYDATA;
  typedef RDS_KEYDATA *RDS_PKEYDATA;

Поля структуры

KeyCode ()
Виртуальный код клавиши (VK_*) согласно описаниям Windows API.
Repeat ()
Только для события нажатия клавиши: TRUE, если нажатие клавиши сгенерировано автоповтором клавиатуры, и FALSE в противном случае. Таким образом, при одиночных нажатиях клавиш в этом поле всегда находится FALSE.
RepeatCount ()
Только при автоповторе нажатия клавиши – число повторов с момента прошлого вызова реакции на событие.
Shift ()
Битовые флаги, описывающие состояние специальных клавиш клавиатуры и кнопок мыши в момент нажатия данной клавиши:
RDS_MLEFTBUTTON Нажата левая кнопка мыши.
RDS_MRIGHTBUTTON Нажата правая кнопка мыши.
RDS_MMIDDLEBUTTON Нажата средняя кнопка мыши.
RDS_KSHIFT Нажата клавиша Shift.
RDS_KALT Нажата клавиша Alt.
RDS_KCTRL Нажата клавиша Ctrl
Для выделения флагов, относящихся только к кнопкам мыши или только к специальным клавишам, можно использовать специальные константы-маски:
RDS_MOUSEFLAGS Все флаги кнопок мыши (RDS_MLEFTBUTTON | RDS_MRIGHTBUTTON | RDS_MMIDDLEBUTTON).
RDS_KBDFLAGS Все флаги специальных клавиш (RDS_KSHIFT | RDS_KALT | RDS_KCTRL).
KeyEvent ()
Произошедшее событие: RDS_BFM_KEYDOWN для нажатия клавиши и RDS_BFM_KEYUP для отпускания. В реакциях на события RDS_BFM_KEY* это поле дублирует параметр CallMode функции модели. В реакциях подсистем на нажатия и отпускания клавиш в окне RDS_BFM_WINDOWKEY* в это поле записывается идентификатор события, близкого по смыслу к произошедшему событию: для RDS_BFM_WINDOWKEYDOWN в это поле записывается RDS_BFM_KEYDOWN, для RDS_BFM_WINDOWKEYUPRDS_BFM_KEYUP:
Событие CallMode Поле KeyEvent
Нажатие клавиши, обрабатывается блоком RDS_BFM_KEYDOWN RDS_BFM_KEYDOWN
Отпускание клавиши, обрабатывается блоком RDS_BFM_KEYUP RDS_BFM_KEYUP
Не обработанное блоками нажатие клавиши, обрабатывается подсистемой RDS_BFM_WINDOWKEYDOWN RDS_BFM_KEYDOWN
Не обработанное блоками отпускание клавиши, обрабатывается подсистемой RDS_BFM_WINDOWKEYUP RDS_BFM_KEYUP
Handled ()
Перед вызовом самого первого блока подсистемы это поле устанавливается в FALSE. Модель блока может присвоить ему TRUE для того, чтобы сообщить RDS об успешной обработке клавиши – это равносильно возврату RDS_BFR_STOP.

См. также

RDS_BFM_KEYUP, RDS_BFM_WINDOWKEYDOWN, RDS_BFM_WINDOWKEYUP.


<< >> Оглавление Указатель