void wxTextCtrl::SetWindowStyleFlag(long style)
{
+ if ( (style & wxBORDER_MASK) == wxBORDER_DEFAULT )
+ style |= wxBORDER_SUNKEN;
+
#if wxUSE_RICHEDIT
// we have to deal with some styles separately because they can't be
// changed by simply calling SetWindowLong(GWL_STYLE) but can be changed
#endif // wxUSE_RICHEDIT
)
{
- SendUpdateEvent();
+ // Windows already sends an update event for single-line
+ // controls.
+ if ( m_windowStyle & wxTE_MULTILINE )
+ SendUpdateEvent();
}
}
// rich edit controls send EN_UPDATE from WM_SETTEXT handler themselves
// but the normal ones don't -- make Clear() behaviour consistent by
// always sending this event
- SendUpdateEvent();
+
+ // Windows already sends an update event for single-line
+ // controls.
+ if ( m_windowStyle & wxTE_MULTILINE )
+ SendUpdateEvent();
}
}
#if wxUSE_RICHEDIT
if ( IsRich() )
{
+ // richedit 3.0 (i.e. the version living in riched20.dll distributed
+ // with Windows 2000 and beyond) doesn't honour EM_SCROLLCARET when
+ // emulating richedit 2.0 unless the control has focus or ECO_NOHIDESEL
+ // option is set (but it does work ok in richedit 1.0 mode...)
+ //
+ // so to make it work we either need to give focus to it here which
+ // will probably create many problems (dummy focus events; window
+ // containing the text control being brought to foreground
+ // unexpectedly; ...) or to temporarily set ECO_NOHIDESEL which may
+ // create other problems too -- or it might not, so let's try to do it
+ if ( GetRichVersion() > 1 )
+ {
+ if ( !HasFlag(wxTE_NOHIDESEL) )
+ {
+ ::SendMessage(GetHwnd(), EM_SETOPTIONS,
+ ECOOP_OR, ECO_NOHIDESEL);
+ }
+ //else: everything is already ok
+ }
+
CHARRANGE range;
range.cpMin = from;
range.cpMax = to;
{
SendMessage(hWnd, EM_SCROLLCARET, (WPARAM)0, (LPARAM)0);
}
+
+#if wxUSE_RICHEDIT
+ // restore ECO_NOHIDESEL if we changed it
+ if ( GetRichVersion() > 1 && !HasFlag(wxTE_NOHIDESEL) )
+ {
+ ::SendMessage(GetHwnd(), EM_SETOPTIONS,
+ ECOOP_AND, ~ECO_NOHIDESEL);
+ }
+#endif // wxUSE_RICHEDIT
+
#else // Win16
// WPARAM is 0: selection is scrolled into view
SendMessage(hWnd, EM_SETSEL, (WPARAM)0, (LPARAM)MAKELONG(from, to));