\membersection{wxConstCast}\label{wxconstcast}
-\func{}{wxConstCast}{ptr, classname}
+\func{classname *}{wxConstCast}{ptr, classname}
This macro expands into {\tt const\_cast<classname *>(ptr)} if the compiler
supports {\it const\_cast} or into an old, C-style cast, otherwise.
\membersection{wxDynamicCast}\label{wxdynamiccast}
-\func{}{wxDynamicCast}{ptr, classname}
+\func{classname *}{wxDynamicCast}{ptr, classname}
This macro returns the pointer {\it ptr} cast to the type {\it classname *} if
-the pointer is of this type (the check is done during the run-time) or NULL
-otherwise. Usage of this macro is preferred over obsoleted wxObject::IsKindOf()
-function.
+the pointer is of this type (the check is done during the run-time) or
+{\tt NULL} otherwise. Usage of this macro is preferred over obsoleted
+wxObject::IsKindOf() function.
-The {\it ptr} argument may be NULL, in which case NULL will be returned.
+The {\it ptr} argument may be {\tt NULL}, in which case {\tt NULL} will be
+returned.
Example:
\wxheading{See also}
\helpref{RTTI overview}{runtimeclassoverview}\\
+\helpref{wxDynamicCastThis}{wxdynamiccastthis}\\
\helpref{wxConstCast}{wxconstcast}\\
\helpref{wxStatiicCast}{wxstaticcast}
+\membersection{wxDynamicCastThis}\label{wxdynamiccastthis}
+
+\func{classname *}{wxDynamicCastThis}{classname}
+
+This macro is equivalent to {\tt wxDynamicCast(this, classname)} but the
+latter provokes spurious compilation warnings from some compilers (because it
+tests whether {\tt this} pointer is non {\tt NULL} which is always true), so
+this macro should be used to avoid them.
+
+\wxheading{See also}
+
+\helpref{wxDynamicCast}{wxdynamiccast}
+
\membersection{wxICON}\label{wxiconmacro}
\func{}{wxICON}{iconName}
\membersection{wxStaticCast}\label{wxstaticcast}
-\func{}{wxStaticCast}{ptr, classname}
+\func{classname *}{wxStaticCast}{ptr, classname}
This macro checks that the cast is valid in debug mode (an assert failure will
result if {\tt wxDynamicCast(ptr, classname) == NULL}) and then returns the
// The 'this' pointer is always true, so use this version to cast the this
// pointer and avoid compiler warnings.
-#define wxDynamicThisCast(obj, className) \
- (((obj)->IsKindOf(&className::sm_class##className)) \
- ? (className *)(obj) \
+#define wxDynamicCastThis(className) \
+ (IsKindOf(&className::sm_class##className) \
+ ? (className *)(this) \
: (className *)0)
#define wxConstCast(obj, className) ((className *)(obj))
if ( event.GetSetText() )
{
- wxControl *control = wxDynamicThisCast(this, wxControl);
+ wxControl *control = wxDynamicCastThis(wxControl);
if ( control )
{
#if wxUSE_TEXTCTRL
}
#if wxUSE_CHECKBOX
- wxCheckBox *checkbox = wxDynamicThisCast(this, wxCheckBox);
+ wxCheckBox *checkbox = wxDynamicCastThis(wxCheckBox);
if ( checkbox )
{
if ( event.GetSetChecked() )
#endif // wxUSE_CHECKBOX
#if wxUSE_RADIOBTN
- wxRadioButton *radiobtn = wxDynamicThisCast(this, wxRadioButton);
+ wxRadioButton *radiobtn = wxDynamicCastThis(wxRadioButton);
if ( radiobtn )
{
if ( event.GetSetChecked() )
wxWindow *wxWindowMSW::FindItem(long id) const
{
#if wxUSE_CONTROLS
- wxControl *item = wxDynamicThisCast(this, wxControl);
+ wxControl *item = wxDynamicCastThis(wxControl);
if ( item )
{
// is it we or one of our "internal" children?
{
wxCHECK_MSG( parent, FALSE, wxT("can't create wxWindow without parent") );
+#if wxUSE_STATBOX
+ // wxGTK doesn't allow to create controls with static box as the parent so
+ // this will result in a crash when the program is ported to wxGTK - warn
+ // about it
+ //
+ // the correct solution is to create the controls as siblings of the
+ // static box
+ wxASSERT_MSG( !wxDynamicCastThis(wxStaticBox),
+ _T("wxStaticBox can't be used as a window parent!") );
+#endif // wxUSE_STATBOX
+
if ( !CreateBase(parent, id, pos, size, style, wxDefaultValidator, name) )
return FALSE;
#if wxUSE_BUTTON
else
{
- wxPanel *panel = wxDynamicThisCast(this, wxPanel);
+ wxPanel *panel = wxDynamicCastThis(wxPanel);
wxButton *btn = NULL;
if ( panel )
{