#include "wx/msw/missing.h"
+#if wxUSE_DRAG_AND_DROP && wxUSE_RICHEDIT
+
+// dummy value used for m_dropTarget, different from any valid pointer value
+// (which are all even under Windows) and NULL
+static wxDropTarget *
+ wxRICHTEXT_DEFAULT_DROPTARGET = wx_reinterpret_cast(wxDropTarget *, 1);
+
+#endif // wxUSE_DRAG_AND_DROP && wxUSE_RICHEDIT
+
// ----------------------------------------------------------------------------
// private classes
// ----------------------------------------------------------------------------
wxTextCtrl::~wxTextCtrl()
{
+#if wxUSE_DRAG_AND_DROP && wxUSE_RICHEDIT
+ if ( m_dropTarget == wxRICHTEXT_DEFAULT_DROPTARGET )
+ {
+ // don't try to destroy this dummy pointer in the base class dtor
+ m_dropTarget = NULL;
+ }
+#endif // wxUSE_DRAG_AND_DROP && wxUSE_RICHEDIT
+
delete m_privateContextMenu;
}
if ( !MSWCreateText(value, pos, size) )
return false;
+#if wxUSE_DRAG_AND_DROP && wxUSE_RICHEDIT
+ if ( IsRich() )
+ {
+ // rich text controls have a default associated drop target which
+ // allows them to receive (rich) text dropped on them, which is nice,
+ // but prevents us from associating a user-defined drop target with
+ // them as we need to unregister the old one first
+ //
+ // to make it work, we set m_dropTarget to this special value initially
+ // and check for it in our SetDropTarget()
+ m_dropTarget = wxRICHTEXT_DEFAULT_DROPTARGET;
+ }
+#endif // wxUSE_DRAG_AND_DROP && wxUSE_RICHEDIT
+
return true;
}
}
#endif // wxUSE_RICHEDIT
+#ifndef __WXWINCE__
+ // Without this, if we pass the size in the constructor and then don't change it,
+ // the themed borders will be drawn incorrectly.
+ SetWindowPos(GetHwnd(), NULL, 0, 0, 0, 0,
+ SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|
+ SWP_FRAMECHANGED);
+#endif
+
return true;
}
// should never see it
if ( buf[len - 2] == _T('\r') && buf[len - 1] == _T('\n') )
{
+ // richedit 1.0 uses "\r\n" as line terminator, so remove "\r"
+ // here and "\n" below
buf[len - 2] = _T('\n');
len--;
}
+ else if ( buf[len - 1] == _T('\r') )
+ {
+ // richedit 2.0+ uses only "\r", replace it with "\n"
+ buf[len - 1] = _T('\n');
+ }
}
#endif // wxUSE_RICHEDIT
return wxTextCtrlBase::MSWOnNotify(idCtrl, lParam, result);
}
+#if wxUSE_DRAG_AND_DROP
+
+void wxTextCtrl::SetDropTarget(wxDropTarget *dropTarget)
+{
+ if ( m_dropTarget == wxRICHTEXT_DEFAULT_DROPTARGET )
+ {
+ // get rid of the built-in drop target
+ ::RevokeDragDrop(GetHwnd());
+ m_dropTarget = NULL;
+ }
+
+ wxTextCtrlBase::SetDropTarget(dropTarget);
+}
+
+#endif // wxUSE_DRAG_AND_DROP
+
// ----------------------------------------------------------------------------
// colour setting for the rich edit controls
// ----------------------------------------------------------------------------