update/reorganize events overview and changed links to it to reflect the fact that it speaks about events in general and not just about handling them

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58712 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2009-02-07 15:22:14 +00:00
parent 9a6fda2288
commit 3e083d652d
8 changed files with 237 additions and 206 deletions

View File

@@ -37,7 +37,7 @@ The following is a basic categorization of them:
@li @subpage overview_app @li @subpage overview_app
@li @subpage overview_unicode @li @subpage overview_unicode
@li @subpage overview_i18n @li @subpage overview_i18n
@li @subpage overview_eventhandling @li @subpage overview_events
@li @subpage overview_windowsizing @li @subpage overview_windowsizing
@li @subpage overview_windowids @li @subpage overview_windowids
@li @subpage overview_log @li @subpage overview_log

View File

@@ -47,7 +47,7 @@ implementations and thus more work.
In both cases you'll want to better explore some hot topics like: In both cases you'll want to better explore some hot topics like:
- @ref overview_windowsizing - @ref overview_windowsizing
- @ref overview_eventhandling_custom to implement your custom widget's events. - @ref overview_events_custom to implement your custom widget's events.
You will probably need also to gain some familiarity with the wxWidgets sources, You will probably need also to gain some familiarity with the wxWidgets sources,
since you'll need to interface with some undocumented wxWidgets internal mechanisms. since you'll need to interface with some undocumented wxWidgets internal mechanisms.

View File

@@ -7,28 +7,57 @@
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
/** /**
@page overview_events Events and Event Handling
@page overview_eventhandling Event Handling Related classes: wxEvtHandler, wxWindow, wxEvent
Classes: wxEvtHandler, wxWindow, wxEvent @li @ref overview_events_introduction
@li @ref overview_events_eventhandling
@li @ref overview_eventhandling_introduction @li @ref overview_events_processing
@li @ref overview_eventhandling_eventtables @li @ref overview_events_custom
@li @ref overview_eventhandling_connect @li @ref overview_events_misc
@li @ref overview_eventhandling_processing
@li @ref overview_eventhandling_propagation
@li @ref overview_eventhandling_virtual
@li @ref overview_eventhandling_prog
@li @ref overview_eventhandling_pluggable
@li @ref overview_eventhandling_winid
@li @ref overview_eventhandling_custom
@li @ref overview_eventhandling_macros
<hr> <hr>
@section overview_eventhandling_introduction Introduction @section overview_events_introduction Introduction to Events
Like with all the other GUI frameworks, the control of flow in wxWidgets
applications is event-based: the program normally performs most of its actions
in response to the events generated by the user. These events can be triggered
by using the input devices (such as keyboard, mouse, joystick) directly or,
more commonly, by a standard control which synthesizes such input events into
higher level events: for example, a wxButton can generate a click event when
the user presses the left mouse button on it and then releases it without
pressing @c Esc in the meanwhile. There are also events which don't directly
correspond to the user actions, such as wxTimerEvent or wxSocketEvent.
But in all cases wxWidgets represents these events in a uniform way and allows
you to handle them in the same way wherever they originate from. And while the
events are normally generated by wxWidgets itself, you can also do this, which
is especially useful when using custom events (see @ref overview_events_custom).
To be more precise, each event is described by:
- <em>Event type</em>: this is simply a value of type wxEventType which
uniquely identifies the type of the event. For example, clicking on a button,
selecting an item from a list box and pressing a key on the keyboard all
generate events with different event types.
- <em>Event class</em> carried by the event: each event has some information
associated with it and this data is represented by an object of a class
derived from wxEvent. Events of different types can use the same event class,
for example both button click and listbox selection events use wxCommandEvent
class (as do all the other simple control events), but the key press event
uses wxKeyEvent as the information associated with it is different.
- <em>Event source</em>: wxEvent stores the object which generated the event
and, for windows, its identifier (see @ref overview_events_winid). As it is
common to have more than one object generating events of the same type (e.g. a
typical window contains several buttons, all generating the same button click
event), checking the event source object or its id allows to distinguish
between them.
@section overview_events_eventhandling Event Handling
There are two principal ways to handle events in wxWidgets. One of them uses There are two principal ways to handle events in wxWidgets. One of them uses
<em>event table</em> macros and allows you to define the connection between events <em>event table</em> macros and allows you to define the connection between events
@@ -46,10 +75,10 @@ although this is probably sufficiently confusing to be a bad idea.
But before you make this choice, let us discuss these two ways in more But before you make this choice, let us discuss these two ways in more
detail. In the next section we provide a short introduction to handling the detail. In the next section we provide a short introduction to handling the
events using the event tables. Please see @ref overview_eventhandling_connect events using the event tables. Please see @ref overview_events_connect
for the discussion of Connect(). for the discussion of Connect().
@section overview_eventhandling_eventtables Event Handling with Event Tables @subsection overview_events_eventtables Event Handling with Event Tables
To use an <em>event table</em> you must first decide in which class you wish to To use an <em>event table</em> you must first decide in which class you wish to
handle the events. The only requirement imposed by wxWidgets is that this class handle the events. The only requirement imposed by wxWidgets is that this class
@@ -175,7 +204,7 @@ wxEvent-derived classes in the discussion of each control generating these
events. events.
@section overview_eventhandling_connect Dynamic Event Handling @subsection overview_events_connect Dynamic Event Handling
As with the event tables, decide in which class you intend to As with the event tables, decide in which class you intend to
handle the events first and, as before, this class must derive from handle the events first and, as before, this class must derive from
@@ -284,7 +313,7 @@ need this extra power. On the other hand, event tables are still perfectly fine
in simple situations where this extra flexibility is not needed. in simple situations where this extra flexibility is not needed.
@section overview_eventhandling_processing How Events are Processed @section overview_events_processing How Events are Processed
The previous sections explain how to define event handlers but don't address The previous sections explain how to define event handlers but don't address
the question of how exactly wxWidgets finds the handler to call for the the question of how exactly wxWidgets finds the handler to call for the
@@ -332,12 +361,12 @@ doesn't count as having handled the event and the search continues):
The event is passed to the next event handler, if any, in the event handler The event is passed to the next event handler, if any, in the event handler
chain, i.e., the steps (1) to (4) are done for it. This chain can be formed chain, i.e., the steps (1) to (4) are done for it. This chain can be formed
using wxEvtHandler::SetNextHandler(): using wxEvtHandler::SetNextHandler():
@image html overview_eventhandling_chain.png @image html overview_events_chain.png
(referring to the image, if @c A->ProcessEvent is called and it doesn't handle (referring to the image, if @c A->ProcessEvent is called and it doesn't handle
the event, @c B->ProcessEvent will be called and so on...). the event, @c B->ProcessEvent will be called and so on...).
In the case of wxWindow you can build a stack (implemented using wxEvtHandler In the case of wxWindow you can build a stack (implemented using wxEvtHandler
double-linked list) using wxWindow::PushEventHandler(): double-linked list) using wxWindow::PushEventHandler():
@image html overview_eventhandling_winstack.png @image html overview_events_winstack.png
(referring to the image, if @c W->ProcessEvent is called, it immediately calls (referring to the image, if @c W->ProcessEvent is called, it immediately calls
@c A->ProcessEvent; if nor @c A nor @c B handle the event, then the wxWindow @c A->ProcessEvent; if nor @c A nor @c B handle the event, then the wxWindow
itself is used - i.e. the dynamically connected event handlers and static itself is used - i.e. the dynamically connected event handlers and static
@@ -382,16 +411,15 @@ solution is to only handle the events at the view classes level, and not in the
document or document manager classes document or document manager classes
@section overview_eventhandling_propagation How Events Propagate Upwards @subsection overview_events_propagation How Events Propagate Upwards
As mentioned in the previous section, the events of the classes deriving from As mentioned above, the events of the classes deriving from wxCommandEvent are
wxCommandEvent are propagated by default to the parent window if they are not propagated by default to the parent window if they are not processed in this
processed in this window itself. But although by default only the command window itself. But although by default only the command events are propagated
events are propagated like this, other events can be propagated as well because like this, other events can be propagated as well because the event handling
the event handling code uses wxEvent::ShouldPropagate() to check whether an code uses wxEvent::ShouldPropagate() to check whether an event should be
event should be propagated. It is also possible to propagate the event only a propagated. It is also possible to propagate the event only a limited number of
limited number of times and not until it is processed (or a top level parent times and not until it is processed (or a top level parent window is reached).
window is reached).
Finally, there is another additional complication (which, in fact, simplifies Finally, there is another additional complication (which, in fact, simplifies
life of wxWidgets programmers significantly): when propagating the command life of wxWidgets programmers significantly): when propagating the command
@@ -446,118 +474,9 @@ will have to be written that will override ProcessEvent() in order to pass
all events (or any selection of them) to the parent window. all events (or any selection of them) to the parent window.
@section overview_eventhandling_virtual Event Handlers vs Virtual Methods @section overview_events_custom Custom Event Summary
It may be noted that wxWidgets' event processing system implements something @subsection overview_events_custom_general General approach
close to virtual methods in normal C++ in spirit: both of these mechanisms
allow you to alter the behaviour of the base class by defining the event handling
functions in the derived classes.
There is however an important difference between the two mechanisms when you
want to invoke the default behaviour, as implemented by the base class, from a
derived class handler. With the virtual functions, you need to call the base
class function directly and you can do it either in the beginning of the
derived class handler function (to post-process the event) or at its end (to
pre-process the event). With the event handlers, you only have the option of
pre-processing the events and in order to still let the default behaviour
happen you must call wxEvent::Skip() and @em not call the base class event
handler directly. In fact, the event handler probably doesn't even exist in the
base class as the default behaviour is often implemented in platform-specific
code by the underlying toolkit or OS itself. But even if it does exist at
wxWidgets level, it should never be called directly as the event handlers are
not part of wxWidgets API and should never be called directly.
Finally, please notice that the event handlers themselves shouldn't be virtual.
They should always be non-virtual and usually private (as there is no need to
make them public) methods of a wxEvtHandler-derived class.
@section overview_eventhandling_prog User Generated Events vs Programmatically Generated Events
While generically wxEvents can be generated both by user
actions (e.g., resize of a wxWindow) and by calls to functions
(e.g., wxWindow::SetSize), wxWidgets controls normally send wxCommandEvent-derived
events only for the user-generated events. The only @b exceptions to this rule are:
@li wxNotebook::AddPage: No event-free alternatives
@li wxNotebook::AdvanceSelection: No event-free alternatives
@li wxNotebook::DeletePage: No event-free alternatives
@li wxNotebook::SetSelection: Use wxNotebook::ChangeSelection instead, as
wxNotebook::SetSelection is deprecated
@li wxTreeCtrl::Delete: No event-free alternatives
@li wxTreeCtrl::DeleteAllItems: No event-free alternatives
@li wxTreeCtrl::EditLabel: No event-free alternatives
@li All wxTextCtrl methods
wxTextCtrl::ChangeValue can be used instead of wxTextCtrl::SetValue but the other
functions, such as wxTextCtrl::Replace or wxTextCtrl::WriteText don't have event-free
equivalents.
@section overview_eventhandling_pluggable Pluggable Event Handlers
In fact, you don't have to derive a new class from a window class
if you don't want to. You can derive a new class from wxEvtHandler instead,
defining the appropriate event table, and then call wxWindow::SetEventHandler
(or, preferably, wxWindow::PushEventHandler) to make this
event handler the object that responds to events. This way, you can avoid
a lot of class derivation, and use instances of the same event handler class (but different
objects as the same event handler object shouldn't be used more than once) to
handle events from instances of different widget classes.
If you ever have to call a window's event handler
manually, use the GetEventHandler function to retrieve the window's event handler and use that
to call the member function. By default, GetEventHandler returns a pointer to the window itself
unless an application has redirected event handling using SetEventHandler or PushEventHandler.
One use of PushEventHandler is to temporarily or permanently change the
behaviour of the GUI. For example, you might want to invoke a dialog editor
in your application that changes aspects of dialog boxes. You can
grab all the input for an existing dialog box, and edit it 'in situ',
before restoring its behaviour to normal. So even if the application
has derived new classes to customize behaviour, your utility can indulge
in a spot of body-snatching. It could be a useful technique for on-line
tutorials, too, where you take a user through a serious of steps and
don't want them to diverge from the lesson. Here, you can examine the events
coming from buttons and windows, and if acceptable, pass them through to
the original event handler. Use PushEventHandler/PopEventHandler
to form a chain of event handlers, where each handler processes a different
range of events independently from the other handlers.
@section overview_eventhandling_winid Window Identifiers
Window identifiers are integers, and are used to
uniquely determine window identity in the event system (though you can use it
for other purposes). In fact, identifiers do not need to be unique
across your entire application as long they are unique within the
particular context you're interested in, such as a frame and its children. You
may use the @c wxID_OK identifier, for example, on any number of dialogs
as long as you don't have several within the same dialog.
If you pass @c wxID_ANY to a window constructor, an identifier will be
generated for you automatically by wxWidgets. This is useful when you don't
care about the exact identifier either because you're not going to process the
events from the control being created or because you process the events
from all controls in one place (in which case you should specify @c wxID_ANY
in the event table or wxEvtHandler::Connect call
as well). The automatically generated identifiers are always negative and so
will never conflict with the user-specified identifiers which must be always
positive.
See @ref page_stdevtid for the list of standard identifiers available.
You can use wxID_HIGHEST to determine the number above which it is safe to
define your own identifiers. Or, you can use identifiers below wxID_LOWEST.
Finally, you can allocate identifiers dynamically using wxNewId() function too.
If you use wxNewId() consistently in your application, you can be sure that
your identifiers don't conflict accidentally.
@section overview_eventhandling_custom Custom Event Summary
@subsection overview_eventhandling_custom_general General approach
Since version 2.2.x of wxWidgets, each event type is identified by an ID Since version 2.2.x of wxWidgets, each event type is identified by an ID
given to the event type @e at runtime that makes it possible to add given to the event type @e at runtime that makes it possible to add
@@ -585,7 +504,7 @@ See also the @ref page_samples_event for an example of code
defining and working with the custom event types. defining and working with the custom event types.
@subsection overview_eventhandling_custom_existing Using Existing Event Classes @subsection overview_events_custom_existing Using Existing Event Classes
If you just want to use a wxCommandEvent with a new event type, use If you just want to use a wxCommandEvent with a new event type, use
one of the generic event table macros listed below, without having to define a one of the generic event table macros listed below, without having to define a
@@ -629,7 +548,7 @@ void MyWindow::SendEvent()
@endcode @endcode
@subsection overview_eventhandling_custom_generic Generic Event Table Macros @subsection overview_events_custom_generic Generic Event Table Macros
@beginTable @beginTable
@row2col{EVT_CUSTOM(event\, id\, func), @row2col{EVT_CUSTOM(event\, id\, func),
@@ -653,7 +572,7 @@ void MyWindow::SendEvent()
@endTable @endTable
@subsection overview_eventhandling_custom_ownclass Defining Your Own Event Class @subsection overview_events_custom_ownclass Defining Your Own Event Class
Under certain circumstances, you must define your own event Under certain circumstances, you must define your own event
class e.g., for sending more complex data from one place to another. Apart class e.g., for sending more complex data from one place to another. Apart
@@ -723,17 +642,124 @@ void MyWindow::SendEvent()
@endcode @endcode
@section overview_eventhandling_macros Event Handling Summary @section overview_events_misc Miscellaneous Notes
@subsection overview_events_virtual Event Handlers vs Virtual Methods
It may be noted that wxWidgets' event processing system implements something
close to virtual methods in normal C++ in spirit: both of these mechanisms
allow you to alter the behaviour of the base class by defining the event handling
functions in the derived classes.
There is however an important difference between the two mechanisms when you
want to invoke the default behaviour, as implemented by the base class, from a
derived class handler. With the virtual functions, you need to call the base
class function directly and you can do it either in the beginning of the
derived class handler function (to post-process the event) or at its end (to
pre-process the event). With the event handlers, you only have the option of
pre-processing the events and in order to still let the default behaviour
happen you must call wxEvent::Skip() and @em not call the base class event
handler directly. In fact, the event handler probably doesn't even exist in the
base class as the default behaviour is often implemented in platform-specific
code by the underlying toolkit or OS itself. But even if it does exist at
wxWidgets level, it should never be called directly as the event handlers are
not part of wxWidgets API and should never be called directly.
Finally, please notice that the event handlers themselves shouldn't be virtual.
They should always be non-virtual and usually private (as there is no need to
make them public) methods of a wxEvtHandler-derived class.
@subsection overview_events_prog User Generated Events vs Programmatically Generated Events
While generically wxEvents can be generated both by user
actions (e.g., resize of a wxWindow) and by calls to functions
(e.g., wxWindow::SetSize), wxWidgets controls normally send wxCommandEvent-derived
events only for the user-generated events. The only @b exceptions to this rule are:
@li wxNotebook::AddPage: No event-free alternatives
@li wxNotebook::AdvanceSelection: No event-free alternatives
@li wxNotebook::DeletePage: No event-free alternatives
@li wxNotebook::SetSelection: Use wxNotebook::ChangeSelection instead, as
wxNotebook::SetSelection is deprecated
@li wxTreeCtrl::Delete: No event-free alternatives
@li wxTreeCtrl::DeleteAllItems: No event-free alternatives
@li wxTreeCtrl::EditLabel: No event-free alternatives
@li All wxTextCtrl methods
wxTextCtrl::ChangeValue can be used instead of wxTextCtrl::SetValue but the other
functions, such as wxTextCtrl::Replace or wxTextCtrl::WriteText don't have event-free
equivalents.
@subsection overview_events_pluggable Pluggable Event Handlers
<em>TODO: Probably deprecated, Connect() provides a better way to do this</em>
In fact, you don't have to derive a new class from a window class
if you don't want to. You can derive a new class from wxEvtHandler instead,
defining the appropriate event table, and then call wxWindow::SetEventHandler
(or, preferably, wxWindow::PushEventHandler) to make this
event handler the object that responds to events. This way, you can avoid
a lot of class derivation, and use instances of the same event handler class (but different
objects as the same event handler object shouldn't be used more than once) to
handle events from instances of different widget classes.
If you ever have to call a window's event handler
manually, use the GetEventHandler function to retrieve the window's event handler and use that
to call the member function. By default, GetEventHandler returns a pointer to the window itself
unless an application has redirected event handling using SetEventHandler or PushEventHandler.
One use of PushEventHandler is to temporarily or permanently change the
behaviour of the GUI. For example, you might want to invoke a dialog editor
in your application that changes aspects of dialog boxes. You can
grab all the input for an existing dialog box, and edit it 'in situ',
before restoring its behaviour to normal. So even if the application
has derived new classes to customize behaviour, your utility can indulge
in a spot of body-snatching. It could be a useful technique for on-line
tutorials, too, where you take a user through a serious of steps and
don't want them to diverge from the lesson. Here, you can examine the events
coming from buttons and windows, and if acceptable, pass them through to
the original event handler. Use PushEventHandler/PopEventHandler
to form a chain of event handlers, where each handler processes a different
range of events independently from the other handlers.
@subsection overview_events_winid Window Identifiers
Window identifiers are integers, and are used to
uniquely determine window identity in the event system (though you can use it
for other purposes). In fact, identifiers do not need to be unique
across your entire application as long they are unique within the
particular context you're interested in, such as a frame and its children. You
may use the @c wxID_OK identifier, for example, on any number of dialogs
as long as you don't have several within the same dialog.
If you pass @c wxID_ANY to a window constructor, an identifier will be
generated for you automatically by wxWidgets. This is useful when you don't
care about the exact identifier either because you're not going to process the
events from the control being created or because you process the events
from all controls in one place (in which case you should specify @c wxID_ANY
in the event table or wxEvtHandler::Connect call
as well). The automatically generated identifiers are always negative and so
will never conflict with the user-specified identifiers which must be always
positive.
See @ref page_stdevtid for the list of standard identifiers available.
You can use wxID_HIGHEST to determine the number above which it is safe to
define your own identifiers. Or, you can use identifiers below wxID_LOWEST.
Finally, you can allocate identifiers dynamically using wxNewId() function too.
If you use wxNewId() consistently in your application, you can be sure that
your identifiers don't conflict accidentally.
@subsection overview_events_macros Event Handling Summary
For the full list of event classes, please see the For the full list of event classes, please see the
@ref group_class_events "event classes group page". @ref group_class_events "event classes group page".
@todo For all controls, state clearly when calling a member function results in
an event being generated and when it doesn't (possibly updating also the
'Events generated by the user versus programmatically-generated events'
paragraph of the 'Event Handling Overview' with the list of the functions
that break the rule).
*/ */

View File

@@ -168,7 +168,7 @@ public:
This function behaves as SetSelection() but does @em not generate the This function behaves as SetSelection() but does @em not generate the
page changing events. page changing events.
See @ref overview_eventhandling_prog for more information. See @ref overview_events_prog for more information.
*/ */
virtual int ChangeSelection(size_t page) = 0; virtual int ChangeSelection(size_t page) = 0;

View File

@@ -75,7 +75,7 @@ enum wxEventCategory
wxEvent used to be a multipurpose event object, and is an abstract base class wxEvent used to be a multipurpose event object, and is an abstract base class
for other event classes (see below). for other event classes (see below).
For more information about events, see the @ref overview_eventhandling overview. For more information about events, see the @ref overview_events overview.
@beginWxPerlOnly @beginWxPerlOnly
In wxPerl custom event classes should be derived from In wxPerl custom event classes should be derived from
@@ -285,7 +285,7 @@ protected:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see @ref overview_eventhandling, wxEvtHandler @see @ref overview_events_processing, wxEvtHandler
*/ */
class wxEventBlocker : public wxEvtHandler class wxEventBlocker : public wxEvtHandler
{ {
@@ -331,7 +331,7 @@ public:
@library{wxbase} @library{wxbase}
@category{events} @category{events}
@see @ref overview_eventhandling @see @ref overview_events_processing
*/ */
class wxEvtHandler : public wxObject class wxEvtHandler : public wxObject
{ {
@@ -538,7 +538,7 @@ public:
Do make sure to specify the correct @a eventSink when connecting to an Do make sure to specify the correct @a eventSink when connecting to an
event of a different object. event of a different object.
See @ref overview_eventhandling_connect for more detailed explanation See @ref overview_events_connect for more detailed explanation
of this function and the @ref page_samples_event sample for usage of this function and the @ref page_samples_event sample for usage
examples. examples.
@@ -764,7 +764,7 @@ public:
The event handler to be set as the next handler. The event handler to be set as the next handler.
Cannot be @NULL. Cannot be @NULL.
@see @ref overview_eventhandling_processing @see @ref overview_events_processing
*/ */
virtual void SetNextHandler(wxEvtHandler* handler); virtual void SetNextHandler(wxEvtHandler* handler);
@@ -776,7 +776,7 @@ public:
The event handler to be set as the previous handler. The event handler to be set as the previous handler.
Cannot be @NULL. Cannot be @NULL.
@see @ref overview_eventhandling_processing @see @ref overview_events_processing
*/ */
virtual void SetPreviousHandler(wxEvtHandler* handler); virtual void SetPreviousHandler(wxEvtHandler* handler);
@@ -1095,7 +1095,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see wxScrollEvent, @ref overview_eventhandling @see wxScrollEvent, @ref overview_events
*/ */
class wxScrollWinEvent : public wxEvent class wxScrollWinEvent : public wxEvent
{ {
@@ -1146,7 +1146,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see @ref overview_eventhandling @see @ref overview_events
*/ */
class wxSysColourChangedEvent : public wxEvent class wxSysColourChangedEvent : public wxEvent
{ {
@@ -1176,7 +1176,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see @ref overview_eventhandling, wxWindowDestroyEvent @see @ref overview_events, wxWindowDestroyEvent
*/ */
class wxWindowCreateEvent : public wxCommandEvent class wxWindowCreateEvent : public wxCommandEvent
{ {
@@ -1260,7 +1260,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see @ref overview_eventhandling @see @ref overview_events
*/ */
class wxPaintEvent : public wxEvent class wxPaintEvent : public wxEvent
{ {
@@ -1288,7 +1288,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see @ref overview_eventhandling, wxTopLevelWindow::Maximize, @see @ref overview_events, wxTopLevelWindow::Maximize,
wxTopLevelWindow::IsMaximized wxTopLevelWindow::IsMaximized
*/ */
class wxMaximizeEvent : public wxEvent class wxMaximizeEvent : public wxEvent
@@ -1369,7 +1369,7 @@ enum wxUpdateUIMode
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see @ref overview_eventhandling @see @ref overview_events
*/ */
class wxUpdateUIEvent : public wxCommandEvent class wxUpdateUIEvent : public wxCommandEvent
{ {
@@ -1994,7 +1994,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see @ref overview_eventhandling @see @ref overview_events
*/ */
class wxDropFilesEvent : public wxEvent class wxDropFilesEvent : public wxEvent
{ {
@@ -2236,7 +2236,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see @ref overview_eventhandling, wxApp::IsActive @see @ref overview_events, wxApp::IsActive
*/ */
class wxActivateEvent : public wxEvent class wxActivateEvent : public wxEvent
{ {
@@ -2280,7 +2280,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see wxCommandEvent, @ref overview_eventhandling @see wxCommandEvent, @ref overview_events
*/ */
class wxContextMenuEvent : public wxCommandEvent class wxContextMenuEvent : public wxCommandEvent
{ {
@@ -2339,7 +2339,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see @ref overview_eventhandling @see @ref overview_events
*/ */
class wxEraseEvent : public wxEvent class wxEraseEvent : public wxEvent
{ {
@@ -2377,7 +2377,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see @ref overview_eventhandling @see @ref overview_events
*/ */
class wxFocusEvent : public wxEvent class wxFocusEvent : public wxEvent
{ {
@@ -2417,7 +2417,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see @ref overview_eventhandling @see @ref overview_events
*/ */
class wxChildFocusEvent : public wxCommandEvent class wxChildFocusEvent : public wxCommandEvent
{ {
@@ -2466,7 +2466,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see wxMouseCaptureChangedEvent, @ref overview_eventhandling, @see wxMouseCaptureChangedEvent, @ref overview_events,
wxWindow::CaptureMouse, wxWindow::ReleaseMouse, wxWindow::GetCapture wxWindow::CaptureMouse, wxWindow::ReleaseMouse, wxWindow::GetCapture
*/ */
class wxMouseCaptureLostEvent : public wxEvent class wxMouseCaptureLostEvent : public wxEvent
@@ -2595,7 +2595,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see wxContextHelp, wxDialog, @ref overview_eventhandling @see wxContextHelp, wxDialog, @ref overview_events
*/ */
class wxHelpEvent : public wxCommandEvent class wxHelpEvent : public wxCommandEvent
{ {
@@ -2735,7 +2735,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see wxScrollBar, wxSlider, wxSpinButton, wxScrollWinEvent, @ref overview_eventhandling @see wxScrollBar, wxSlider, wxSpinButton, wxScrollWinEvent, @ref overview_events
*/ */
class wxScrollEvent : public wxCommandEvent class wxScrollEvent : public wxCommandEvent
{ {
@@ -2800,7 +2800,7 @@ enum wxIdleMode
@library{wxbase} @library{wxbase}
@category{events} @category{events}
@see @ref overview_eventhandling, wxUpdateUIEvent, wxWindow::OnInternalIdle @see @ref overview_events, wxUpdateUIEvent, wxWindow::OnInternalIdle
*/ */
class wxIdleEvent : public wxEvent class wxIdleEvent : public wxEvent
{ {
@@ -2886,7 +2886,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see @ref overview_eventhandling @see @ref overview_events
*/ */
class wxInitDialogEvent : public wxEvent class wxInitDialogEvent : public wxEvent
{ {
@@ -2923,7 +2923,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see @ref overview_eventhandling, wxWindowCreateEvent @see @ref overview_events, wxWindowCreateEvent
*/ */
class wxWindowDestroyEvent : public wxCommandEvent class wxWindowDestroyEvent : public wxCommandEvent
{ {
@@ -3048,7 +3048,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see wxMouseCaptureLostEvent, @ref overview_eventhandling, @see wxMouseCaptureLostEvent, @ref overview_events,
wxWindow::CaptureMouse, wxWindow::ReleaseMouse, wxWindow::GetCapture wxWindow::CaptureMouse, wxWindow::ReleaseMouse, wxWindow::GetCapture
*/ */
class wxMouseCaptureChangedEvent : public wxEvent class wxMouseCaptureChangedEvent : public wxEvent
@@ -3210,7 +3210,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see wxCommandEvent, @ref overview_eventhandling @see wxCommandEvent, @ref overview_events
*/ */
class wxMenuEvent : public wxEvent class wxMenuEvent : public wxEvent
{ {
@@ -3259,7 +3259,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see @ref overview_eventhandling, wxWindow::Show, @see @ref overview_events, wxWindow::Show,
wxWindow::IsShown wxWindow::IsShown
*/ */
@@ -3307,7 +3307,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see @ref overview_eventhandling, wxTopLevelWindow::Iconize, @see @ref overview_events, wxTopLevelWindow::Iconize,
wxTopLevelWindow::IsIconized wxTopLevelWindow::IsIconized
*/ */
class wxIconizeEvent : public wxEvent class wxIconizeEvent : public wxEvent
@@ -3351,7 +3351,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see wxPoint, @ref overview_eventhandling @see wxPoint, @ref overview_events
*/ */
class wxMoveEvent : public wxEvent class wxMoveEvent : public wxEvent
{ {
@@ -3393,7 +3393,7 @@ public:
@library{wxcore} @library{wxcore}
@category{events} @category{events}
@see wxSize, @ref overview_eventhandling @see wxSize, @ref overview_events
*/ */
class wxSizeEvent : public wxEvent class wxSizeEvent : public wxEvent
{ {
@@ -3478,20 +3478,23 @@ public:
/** @addtogroup group_funcmacro_events */ /** @addtogroup group_funcmacro_events */
//@{ //@{
/**
A value uniquely identifying the type of the event.
The values of this type should only be created using wxNewEventType().
See the macro DEFINE_EVENT_TYPE() for more info.
@see @ref overview_events_introduction
*/
typedef int wxEventType;
/** /**
A special event type usually used to indicate that some wxEvent has yet A special event type usually used to indicate that some wxEvent has yet
no type assigned. no type assigned.
*/ */
wxEventType wxEVT_NULL; wxEventType wxEVT_NULL;
/**
Each wxEvent-derived class has an @e event-type associated.
See the macro DEFINE_EVENT_TYPE() for more info.
@see @ref overview_eventhandling_custom
*/
typedef int wxEventType;
/** /**
Initializes a new event type using wxNewEventType(). Initializes a new event type using wxNewEventType().
*/ */
@@ -3510,7 +3513,7 @@ wxEventType wxNewEventType();
and the END_EVENT_TABLE() macros, plus some additional @c EVT_xxx macro and the END_EVENT_TABLE() macros, plus some additional @c EVT_xxx macro
to capture events. to capture events.
@see @ref overview_eventhandling_eventtables @see @ref overview_events_eventtables
*/ */
#define DECLARE_EVENT_TABLE() #define DECLARE_EVENT_TABLE()
@@ -3520,7 +3523,7 @@ wxEventType wxNewEventType();
Use END_EVENT_TABLE() to terminate the event-declaration block. Use END_EVENT_TABLE() to terminate the event-declaration block.
@see @ref overview_eventhandling_eventtables @see @ref overview_events_eventtables
*/ */
#define BEGIN_EVENT_TABLE(theClass, baseClass) #define BEGIN_EVENT_TABLE(theClass, baseClass)
@@ -3530,7 +3533,7 @@ wxEventType wxNewEventType();
Use BEGIN_EVENT_TABLE() to start the event-declaration block. Use BEGIN_EVENT_TABLE() to start the event-declaration block.
@see @ref overview_eventhandling_eventtables @see @ref overview_events_eventtables
*/ */
#define END_EVENT_TABLE() #define END_EVENT_TABLE()

View File

@@ -27,7 +27,7 @@
@library{wxcore} @library{wxcore}
@category{menus} @category{menus}
@see wxMenu, @ref overview_eventhandling @see wxMenu, @ref overview_events
*/ */
class wxMenuBar : public wxWindow class wxMenuBar : public wxWindow
{ {
@@ -427,12 +427,12 @@ public:
specifying an object whose class has @c EVT_MENU entries; specifying an object whose class has @c EVT_MENU entries;
Note that instead of static @c EVT_MENU macros you can also use dynamic Note that instead of static @c EVT_MENU macros you can also use dynamic
connection; see @ref overview_eventhandling_connect. connection; see @ref overview_events_connect.
@library{wxcore} @library{wxcore}
@category{menus} @category{menus}
@see wxMenuBar, wxWindow::PopupMenu, @ref overview_eventhandling, @see wxMenuBar, wxWindow::PopupMenu, @ref overview_events,
@ref wxFileHistory "wxFileHistory (most recently used files menu)" @ref wxFileHistory "wxFileHistory (most recently used files menu)"
*/ */
class wxMenu : public wxEvtHandler class wxMenu : public wxEvtHandler

View File

@@ -1213,7 +1213,7 @@ public:
This functions does not generate the @c wxEVT_COMMAND_TEXT_UPDATED This functions does not generate the @c wxEVT_COMMAND_TEXT_UPDATED
event but otherwise is identical to SetValue(). event but otherwise is identical to SetValue().
See @ref overview_eventhandling_prog for more information. See @ref overview_events_prog for more information.
@since 2.7.1 @since 2.7.1

View File

@@ -161,7 +161,7 @@ enum wxWindowVariant
Using this flag for the given window allows to block this Using this flag for the given window allows to block this
propagation at this window, i.e. prevent the events from being propagation at this window, i.e. prevent the events from being
propagated further upwards. Dialogs have this flag on by default propagated further upwards. Dialogs have this flag on by default
for the reasons explained in the @ref overview_eventhandling. for the reasons explained in the @ref overview_events.
@style{wxWS_EX_TRANSIENT} @style{wxWS_EX_TRANSIENT}
Don't use this window as an implicit parent for the other windows: Don't use this window as an implicit parent for the other windows:
this must be used with transient windows as otherwise there is the this must be used with transient windows as otherwise there is the
@@ -185,7 +185,7 @@ enum wxWindowVariant
@library{wxcore} @library{wxcore}
@category{miscwnd} @category{miscwnd}
@see @ref overview_eventhandling "Event handling overview", @see @ref overview_events "Event handling overview",
@ref overview_windowsizing "Window sizing overview" @ref overview_windowsizing "Window sizing overview"
*/ */
class wxWindow : public wxEvtHandler class wxWindow : public wxEvtHandler
@@ -1714,7 +1714,7 @@ public:
If this is @true, the handler will be deleted after it is removed If this is @true, the handler will be deleted after it is removed
(and the returned value will be @NULL). (and the returned value will be @NULL).
@see @ref overview_eventhandling_processing @see @ref overview_events_processing
*/ */
wxEvtHandler* PopEventHandler(bool deleteHandler = false); wxEvtHandler* PopEventHandler(bool deleteHandler = false);
@@ -1746,13 +1746,15 @@ public:
It must not be part of a wxEvtHandler chain; an assert will fail It must not be part of a wxEvtHandler chain; an assert will fail
if it's not unlinked (see wxEvtHandler::IsUnlinked). if it's not unlinked (see wxEvtHandler::IsUnlinked).
@see @ref overview_eventhandling_processing @see @ref overview_events_processing
*/ */
void PushEventHandler(wxEvtHandler* handler); void PushEventHandler(wxEvtHandler* handler);
/** /**
Find the given @a handler in the windows event handler stack and unlinks Find the given @a handler in the windows event handler stack and
(but not delete) it. See wxEvtHandler::Unlink() for more info. removes (but does not delete) it from the stack.
See wxEvtHandler::Unlink() for more info.
@param handler @param handler
The event handler to remove, must be non-@NULL and The event handler to remove, must be non-@NULL and
@@ -1776,7 +1778,7 @@ public:
@param handler @param handler
Specifies the handler to be set. Cannot be @NULL. Specifies the handler to be set. Cannot be @NULL.
@see @ref overview_eventhandling_processing @see @ref overview_events_processing
*/ */
void SetEventHandler(wxEvtHandler* handler); void SetEventHandler(wxEvtHandler* handler);