The modifiers keys are @c WXK_SHIFT, @c WXK_CONTROL, @c WXK_ALT and various
@c WXK_WINDOWS_XXX from ::wxKeyCode enum.
-
- You may discover how the other keys on your system behave interactively by
- running the @ref page_samples_keyboard wxWidgets sample and pressing some
- keys in it.
-
- @b Tip: be sure to call @c event.Skip() for events that you don't process in
- key event function, otherwise menu shortcuts may cease to work under Windows.
+ Modifier keys events are special in one additional aspect: usually the
+ keyboard state associated with a key press is well defined, e.g.
+ wxKeyboardState::ShiftDown() returns @c true only if the Shift key was held
+ pressed when the key that generated this event itself was pressed. There is
+ an ambiguity for the key press events for Shift key itself however. By
+ convention, it is considered to be already pressed when it is pressed and
+ already released when it is released. In other words, @c wxEVT_KEY_DOWN
+ event for the Shift key itself will have @c wxMOD_SHIFT in GetModifiers()
+ and ShiftDown() will return true while the @c wxEVT_KEY_UP event for Shift
+ itself will not have @c wxMOD_SHIFT in its modifiers and ShiftDown() will
+ return false.
+
+
+ @b Tip: You may discover the key codes and modifiers generated by all the
+ keys on your system interactively by running the @ref
+ page_samples_keyboard wxWidgets sample and pressing some keys in it.
@note If a key down (@c EVT_KEY_DOWN) event is caught and the event handler
does not call @c event.Skip() then the corresponding char event
- (@c EVT_CHAR) will not happen.
- This is by design and enables the programs that handle both types of
- events to be a bit simpler.
+ (@c EVT_CHAR) will not happen. This is by design and enables the
+ programs that handle both types of events to avoid processing the
+ same key twice. As a consequence, if you do not want to suppress the
+ @c wxEVT_CHAR events for the keys you handle, always call @c
+ event.Skip() in your @c wxEVT_KEY_DOWN handler. Not doing may also
+ prevent accelerators defined using this key from working.
+
+ @note If a key is maintained in a pressed state, you will typically get a
+ lot of (automatically generated) key down events but only one key up
+ one at the end when the key is released so it is wrong to assume that
+ there is one up event corresponding to each down one.
@note For Windows programmers: The key and char events in wxWidgets are
similar to but slightly different from Windows @c WM_KEYDOWN and
//@}
/**
- Returns the raw key code for this event. This is a platform-dependent scan code
- which should only be used in advanced applications.
+ Returns the raw key code for this event.
+
+ The flags are platform-dependent and should only be used if the
+ functionality provided by other wxKeyEvent methods is insufficient.
+
+ Under MSW, the raw key code is the value of @c wParam parameter of the
+ corresponding message.
+
+ Under GTK, the raw key code is the @c keyval field of the corresponding
+ GDK event.
+
+ Under OS X, the raw key code is the @c keyCode field of the
+ corresponding NSEvent.
@note Currently the raw key codes are not supported by all ports, use
@ifdef_ wxHAS_RAW_KEY_CODES to determine if this feature is available.
wxUint32 GetRawKeyCode() const;
/**
- Returns the low level key flags for this event. The flags are
- platform-dependent and should only be used in advanced applications.
+ Returns the low level key flags for this event.
+
+ The flags are platform-dependent and should only be used if the
+ functionality provided by other wxKeyEvent methods is insufficient.
+
+ Under MSW, the raw flags are just the value of @c lParam parameter of
+ the corresponding message.
+
+ Under GTK, the raw flags contain the @c hardware_keycode field of the
+ corresponding GDK event.
+
+ Under OS X, the raw flags contain the modifiers state.
@note Currently the raw key flags are not supported by all ports, use
@ifdef_ wxHAS_RAW_KEY_CODES to determine if this feature is available.