]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/textctrl.cpp
compilation fix for !MSVC
[wxWidgets.git] / src / msw / textctrl.cpp
index 6e285fabad1faacd4bd0c1f5ebf0b4db2db4c652..9cb0a4f03ae5dfbd4f4f09edca43144c56b19e94 100644 (file)
@@ -362,6 +362,10 @@ void wxTextCtrl::AdoptAttributesFromHWND()
         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
@@ -410,6 +414,12 @@ WXDWORD wxTextCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const
     if ( style & wxTE_NOHIDESEL )
         msStyle |= ES_NOHIDESEL;
 
+    if ( style & wxTE_CENTRE )
+        msStyle |= ES_CENTER;
+
+    if ( style & wxTE_RIGHT )
+        msStyle |= ES_RIGHT;
+
     return msStyle;
 }
 
@@ -1276,26 +1286,41 @@ long wxTextCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
 
     if ( nMsg == WM_GETDLGCODE )
     {
-        // we always want the chars and the arrows
-        long lDlgCode = DLGC_WANTCHARS | DLGC_WANTARROWS;
-
-        // we may have several different cases:
-        // 1. normal case: both TAB and ENTER are used for dialog navigation
-        // 2. ctrl which wants TAB for itself: ENTER is used to pass to the
-        //    next control in the dialog
-        // 3. ctrl which wants ENTER for itself: TAB is used for dialog
-        //    navigation
-        // 4. ctrl which wants both TAB and ENTER: Ctrl-ENTER is used to pass
-        //    to the next control
-
-        // the multiline edit control should always get <Return> for itself
-        if ( HasFlag(wxTE_PROCESS_ENTER) || HasFlag(wxTE_MULTILINE) )
-            lDlgCode |= DLGC_WANTMESSAGE;
-
-        if ( HasFlag(wxTE_PROCESS_TAB) )
-            lDlgCode |= DLGC_WANTTAB;
-
-        lRc |= lDlgCode;
+        if ( IsEditable() )
+        {
+            // we always want the chars and the arrows
+            long lDlgCode = DLGC_WANTCHARS | DLGC_WANTARROWS;
+
+            // we may have several different cases:
+            // 1. normal case: both TAB and ENTER are used for dlg navigation
+            // 2. ctrl which wants TAB for itself: ENTER is used to pass to the
+            //    next control in the dialog
+            // 3. ctrl which wants ENTER for itself: TAB is used for dialog
+            //    navigation
+            // 4. ctrl which wants both TAB and ENTER: Ctrl-ENTER is used to go
+            //    to the next control
+
+            // the multiline edit control should always get <Return> for itself
+            if ( HasFlag(wxTE_PROCESS_ENTER) || HasFlag(wxTE_MULTILINE) )
+                lDlgCode |= DLGC_WANTMESSAGE;
+
+            if ( HasFlag(wxTE_PROCESS_TAB) )
+                lDlgCode |= DLGC_WANTTAB;
+
+            lRc |= lDlgCode;
+        }
+        else // !editable
+        {
+            // when the control can't be edited by user, it doesn't need any
+            // extra keys changing its contents at all -- but it still needs
+            // the arrows to allow navigating in it
+            //
+            // NB: use "=", not "|=" as the base class version returns the
+            //     same flags is this state as usual (i.e. including
+            //     DLGC_WANTMESSAGE). This is strange (how does it work in the
+            //     native Win32 apps?) but for now live with it.
+            lRc = DLGC_WANTARROWS;
+        }
     }
 
     return lRc;