Also documented combobox's EVT_TEXT_ENTER git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30929 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			110 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
\section{Runtime class information (aka RTTI) overview}\label{runtimeclassoverview}
 | 
						|
 | 
						|
Classes: \helpref{wxObject}{wxobject}, \helpref{wxClassInfo}{wxclassinfo}.
 | 
						|
 | 
						|
One of the failings of C++ used to be that no run-time information was provided
 | 
						|
about a class and its position in the inheritance hierarchy.
 | 
						|
Another, which still persists, is that instances of a class cannot be created
 | 
						|
just by knowing the name of a class, which makes facilities such as persistent
 | 
						|
storage hard to implement.
 | 
						|
 | 
						|
Most C++ GUI frameworks overcome these limitations by means of a set of
 | 
						|
macros and functions and wxWidgets is no exception. As it originated before the
 | 
						|
addition of RTTI to the C++ standard and as support for it is still missing from
 | 
						|
some (albeit old) compilers, wxWidgets doesn't (yet) use it, but provides its
 | 
						|
own macro-based RTTI system.
 | 
						|
 | 
						|
In the future, the standard C++ RTTI will be used though and you're encouraged
 | 
						|
to use whenever possible the \helpref{wxDynamicCast()}{wxdynamiccast} macro which,
 | 
						|
for the implementations that support it, is defined just as dynamic\_cast<> and
 | 
						|
uses wxWidgets RTTI for all the others. This macro is limited to wxWidgets
 | 
						|
classes only and only works with pointers (unlike the real dynamic\_cast<> which
 | 
						|
also accepts references).
 | 
						|
 | 
						|
Each class that you wish to be known to the type system should have
 | 
						|
a macro such as DECLARE\_DYNAMIC\_CLASS just inside the class declaration.
 | 
						|
The macro IMPLEMENT\_DYNAMIC\_CLASS should be in the implementation file.
 | 
						|
Note that these are entirely optional; use them if you wish to check object
 | 
						|
types, or create instances of classes using the class name. However,
 | 
						|
it is good to get into the habit of adding these macros for all classes.
 | 
						|
 | 
						|
Variations on these \helpref{macros}{rttimacros} are used for multiple inheritance, and abstract
 | 
						|
classes that cannot be instantiated dynamically or otherwise.
 | 
						|
 | 
						|
DECLARE\_DYNAMIC\_CLASS inserts a static wxClassInfo declaration into the
 | 
						|
class, initialized by IMPLEMENT\_DYNAMIC\_CLASS. When initialized, the
 | 
						|
wxClassInfo object inserts itself into a linked list (accessed through
 | 
						|
wxClassInfo::first and wxClassInfo::next pointers). The linked list
 | 
						|
is fully created by the time all global initialisation is done.
 | 
						|
 | 
						|
IMPLEMENT\_DYNAMIC\_CLASS is a macro that not only initialises the static
 | 
						|
wxClassInfo member, but defines a global function capable of creating a
 | 
						|
dynamic object of the class in question. A pointer to this function is
 | 
						|
stored in wxClassInfo, and is used when an object should be created
 | 
						|
dynamically.
 | 
						|
 | 
						|
\helpref{wxObject::IsKindOf}{wxobjectiskindof} uses the linked list of
 | 
						|
wxClassInfo. It takes a wxClassInfo argument, so use CLASSINFO(className)
 | 
						|
to return an appropriate wxClassInfo pointer to use in this function.
 | 
						|
 | 
						|
The function \helpref{wxCreateDynamicObject}{wxcreatedynamicobject} can be used
 | 
						|
to construct a new object of a given type, by supplying a string name.
 | 
						|
If you have a pointer to the wxClassInfo object instead, then you
 | 
						|
can simply call \helpref{wxClassInfo::CreateObject}{wxclassinfocreateobject}.
 | 
						|
 | 
						|
\subsection{wxClassInfo}\label{wxclassinfooverview}
 | 
						|
 | 
						|
\overview{Runtime class information (aka RTTI) overview}{runtimeclassoverview}
 | 
						|
 | 
						|
Class: \helpref{wxClassInfo}{wxclassinfo}
 | 
						|
 | 
						|
This class stores meta-information about classes. An application
 | 
						|
may use macros such as DECLARE\_DYNAMIC\_CLASS and IMPLEMENT\_DYNAMIC\_CLASS
 | 
						|
to record run-time information about a class, including:
 | 
						|
 | 
						|
\begin{itemize}\itemsep=0pt
 | 
						|
\item its position in the inheritance hierarchy;
 | 
						|
\item the base class name(s) (up to two base classes are permitted);
 | 
						|
\item a string representation of the class name;
 | 
						|
\item a function that can be called to construct an instance of this class.
 | 
						|
\end{itemize}
 | 
						|
 | 
						|
The DECLARE\_... macros declare a static wxClassInfo variable in a class, which is initialized
 | 
						|
by macros of the form IMPLEMENT\_... in the implementation C++ file. Classes whose instances may be
 | 
						|
constructed dynamically are given a global constructor function which returns a new object.
 | 
						|
 | 
						|
You can get the wxClassInfo for a class by using the CLASSINFO macro, e.g. CLASSINFO(wxFrame).
 | 
						|
You can get the wxClassInfo for an object using wxObject::GetClassInfo.
 | 
						|
 | 
						|
See also \helpref{wxObject}{wxobject} and \helpref{wxCreateDynamicObject}{wxcreatedynamicobject}.
 | 
						|
 | 
						|
\subsection{Example}\label{runtimeclassinformationexample}
 | 
						|
 | 
						|
In a header file frame.h:
 | 
						|
 | 
						|
\begin{verbatim}
 | 
						|
class wxFrame : public wxWindow
 | 
						|
{
 | 
						|
DECLARE_DYNAMIC_CLASS(wxFrame)
 | 
						|
 | 
						|
private:
 | 
						|
    wxString m_title;
 | 
						|
 | 
						|
public:
 | 
						|
    ...
 | 
						|
};
 | 
						|
\end{verbatim}
 | 
						|
 | 
						|
In a C++ file frame.cpp:
 | 
						|
 | 
						|
\begin{verbatim}
 | 
						|
IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow)
 | 
						|
 | 
						|
wxFrame::wxFrame()
 | 
						|
{
 | 
						|
...
 | 
						|
}
 | 
						|
\end{verbatim}
 | 
						|
 | 
						|
 |