+ if (style & ES_MULTILINE)
+ m_windowStyle |= wxTE_MULTILINE;
+ if (style & ES_PASSWORD)
+ m_windowStyle |= wxTE_PASSWORD;
+ if (style & ES_READONLY)
+ m_windowStyle |= wxTE_READONLY;
+ if (style & ES_WANTRETURN)
+ m_windowStyle |= wxTE_PROCESS_ENTER;
+ if (style & ES_CENTER)
+ m_windowStyle |= wxTE_CENTRE;
+ if (style & ES_RIGHT)
+ m_windowStyle |= wxTE_RIGHT;
+}
+
+WXDWORD wxTextCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const
+{
+ // default border for the text controls is the sunken one
+ if ( (style & wxBORDER_MASK) == wxBORDER_DEFAULT )
+ {
+ style |= wxBORDER_SUNKEN;
+ }
+
+ long msStyle = wxControl::MSWGetStyle(style, exstyle);
+
+ // styles which we alaways add by default
+ if ( style & wxTE_MULTILINE )
+ {
+ wxASSERT_MSG( !(style & wxTE_PROCESS_ENTER),
+ wxT("wxTE_PROCESS_ENTER style is ignored for multiline text controls (they always process it)") );
+
+ msStyle |= ES_MULTILINE | ES_WANTRETURN;
+ if ( !(style & wxTE_NO_VSCROLL) )
+ {
+ // always adjust the vertical scrollbar automatically if we have it
+ msStyle |= WS_VSCROLL | ES_AUTOVSCROLL;
+
+ // we have to use this style for the rich edit controls because
+ // without it the vertical scrollbar never appears at all in
+ // richedit 3.0 because of our ECO_NOHIDESEL hack (search for it)
+ if ( style & wxTE_RICH2 )
+ {
+ msStyle |= ES_DISABLENOSCROLL;
+ }
+ }
+
+ style |= wxTE_PROCESS_ENTER;
+ }
+ else // !multiline
+ {
+ // there is really no reason to not have this style for single line
+ // text controls
+ msStyle |= ES_AUTOHSCROLL;
+ }
+
+ // styles which we add depending on the specified wxWindows styles
+ if ( style & wxHSCROLL )
+ {
+ // automatically scroll the control horizontally as necessary
+ msStyle |= WS_HSCROLL;// | ES_AUTOHSCROLL;
+ }
+
+ if ( style & wxTE_READONLY )
+ msStyle |= ES_READONLY;
+
+ if ( style & wxTE_PASSWORD )
+ msStyle |= ES_PASSWORD;
+
+ if ( style & wxTE_NOHIDESEL )
+ msStyle |= ES_NOHIDESEL;
+
+ // note that we can't do do "& wxTE_LEFT" as wxTE_LEFT == 0
+ if ( style & wxTE_CENTRE )
+ msStyle |= ES_CENTER;
+ else if ( style & wxTE_RIGHT )
+ msStyle |= ES_RIGHT;
+ else
+ msStyle |= ES_LEFT; // ES_LEFT if 0 as well but for consistency...
+
+ return msStyle;
+}
+
+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
+ // using richedit-specific EM_SETOPTIONS
+ if ( IsRich() &&
+ ((style & wxTE_NOHIDESEL) != (GetWindowStyle() & wxTE_NOHIDESEL)) )
+ {
+ bool set = (style & wxTE_NOHIDESEL) != 0;
+
+ ::SendMessage(GetHwnd(), EM_SETOPTIONS, set ? ECOOP_OR : ECOOP_AND,
+ set ? ECO_NOHIDESEL : ~ECO_NOHIDESEL);
+ }
+#endif // wxUSE_RICHEDIT
+
+ wxControl::SetWindowStyleFlag(style);