Responding to Keyboard Events


  typedef void (*KeyFunc)(Control *c, unsigned long key);


  void  on_control_key_down  (Control *c, KeyFunc key_down);
  void  on_control_key_action(Control *c, KeyFunc key_action);


  enum {
    BELL  = 0x07,           /* ASCII bell character */
    BKSP  = 0x08,           /* ASCII backspace */
    VTAB  = 0x0B,           /* ASCII vertical tab */
    FF    = 0x0C,           /* ASCII form-feed */
    ESC   = 0x1B            /* ASCII escape character */

  enum {
    INS   = 0x2041,         /* Insert key */
    DEL   = 0x2326,         /* Delete key */
    HOME  = 0x21B8,         /* Home key */
    END   = 0x2198,         /* End key */
    PGUP  = 0x21DE,         /* Page Up key */
    PGDN  = 0x21DF,         /* Page Down key */
    ENTER = 0x2324          /* Numerical keypad Enter key */

  enum {
    LEFT  = 0x2190,         /* Left arrow key */
    UP    = 0x2191,         /* Up arrow key */
    RIGHT = 0x2192,         /* Right arrow key */
    DOWN  = 0x2193          /* Down arrow key */

  enum {
    F1    = 0x276C,         /* Function keys */
    F2    = 0x276D,
    F3    = 0x276E,
    F4    = 0x276F,
    F5    = 0x2770,
    F6    = 0x2771,
    F7    = 0x2772,
    F8    = 0x2773,
    F9    = 0x2774,
    F10   = 0x2775

  enum {
    CONTROL = 0x20000000L,  /* Modifier bit-fields */
    SHIFT   = 0x10000000L


Keyboard events can be caught using the on_control_key_down and on_control_key_action functions. The first function sets the call-back used to handle normal Unicode keys, including the return and escape keys. Keys which do not produce Unicode values are sent to the second function's call-back, such as when the user presses an arrow key or a function key.

Keyboard call-backs can be associated with controls. Typically you should not use these functions with pre-defined controls such as buttons, fields etc, only with custom-designed controls, since the pre-defined controls already make use of their own keyboard call-backs.

The call-back specified by the on_control_key_down function may be passed any of the following keys:

To see other keyboard events, the on_control_key_action function associates a call-back with a control or window. That call-back can see the following key values:

These keys should not be handled by same call-back as ordinary key_down events, since a Unicode keyboard may be able to generate the same value explicitly, and then confusion would exist about whether the user pressed an arrow key, or generated a Unicode value which happens to map to the same number.