text controls respect wxTE_PROCESS_ENTER/TAB styles again, WM_GETDLGCODE
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 19 Jun 1999 00:08:58 +0000 (00:08 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 19 Jun 1999 00:08:58 +0000 (00:08 +0000)
handling is generally better

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2827 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/textctrl.h
include/wx/msw/window.h
src/msw/textctrl.cpp
src/msw/window.cpp

index 46f240ad9157480147423a0a9b6f8f40ed0142ba..646133861804936f01863903ec4638126296ede6 100644 (file)
@@ -181,7 +181,6 @@ public:
 
     virtual void AdoptAttributesFromHWND();
     virtual void SetupColours();
 
     virtual void AdoptAttributesFromHWND();
     virtual void SetupColours();
-    virtual long MSWGetDlgCode();
 
 protected:
 #if wxUSE_RICHEDIT
 
 protected:
 #if wxUSE_RICHEDIT
index 3d4c2a2ad1e6f2c176e38e335e41fca904dd5273..0cfca8bfc5cd86b60c45d4b071afae97ec592f2e 100644 (file)
@@ -296,12 +296,12 @@ public:
     bool HandleSysCommand(WXWPARAM wParam, WXLPARAM lParam);
 
     bool HandleCtlColor(WXHBRUSH *hBrush,
     bool HandleSysCommand(WXWPARAM wParam, WXLPARAM lParam);
 
     bool HandleCtlColor(WXHBRUSH *hBrush,
-                               WXHDC hdc,
-                               WXHWND hWnd,
-                               WXUINT nCtlColor,
-                               WXUINT message,
-                               WXWPARAM wParam,
-                               WXLPARAM lParam);
+                        WXHDC hdc,
+                        WXHWND hWnd,
+                        WXUINT nCtlColor,
+                        WXUINT message,
+                        WXWPARAM wParam,
+                        WXLPARAM lParam);
 
     bool HandlePaletteChanged(WXHWND hWndPalChange);
     bool HandleQueryNewPalette();
 
     bool HandlePaletteChanged(WXHWND hWndPalChange);
     bool HandleQueryNewPalette();
@@ -385,6 +385,9 @@ protected:
 
     WXHMENU               m_hMenu; // Menu, if any
 
 
     WXHMENU               m_hMenu; // Menu, if any
 
+    // the return value of WM_GETDLGCODE handler
+    long m_lDlgCode;
+
     // implement the base class pure virtuals
     virtual void DoClientToScreen( int *x, int *y ) const;
     virtual void DoScreenToClient( int *x, int *y ) const;
     // implement the base class pure virtuals
     virtual void DoClientToScreen( int *x, int *y ) const;
     virtual void DoScreenToClient( int *x, int *y ) const;
index 65b1f2522266e004d9dd6ee5d9e795974abc6640..db6f5009c4f665b05b7c55b79c9dda7937862360 100644 (file)
@@ -151,6 +151,21 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
   if (m_windowStyle & wxTE_PASSWORD) // hidden input
     msStyle |= ES_PASSWORD;
 
   if (m_windowStyle & wxTE_PASSWORD) // hidden input
     msStyle |= ES_PASSWORD;
 
+    // we always want the characters and the arrows
+    m_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
+    if ( m_windowStyle & wxTE_PROCESS_ENTER )
+        m_lDlgCode |= DLGC_WANTMESSAGE;
+    if ( m_windowStyle & wxTE_PROCESS_TAB )
+        m_lDlgCode |= DLGC_WANTTAB;
+
   const wxChar *windowClass = _T("EDIT");
 
 #if wxUSE_RICHEDIT
   const wxChar *windowClass = _T("EDIT");
 
 #if wxUSE_RICHEDIT
@@ -1123,26 +1138,6 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
     event.Skip();
 }
 
     event.Skip();
 }
 
-long wxTextCtrl::MSWGetDlgCode()
-{
-    // we always want the characters and the arrows
-    long lRc = 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
-    if ( m_windowStyle & wxTE_PROCESS_ENTER )
-        lRc |= DLGC_WANTMESSAGE;
-    if ( m_windowStyle & wxTE_PROCESS_TAB )
-        lRc |= DLGC_WANTTAB;
-
-    return lRc;
-}
-
 bool wxTextCtrl::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
 {
     switch (param)
 bool wxTextCtrl::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
 {
     switch (param)
index d0f8984af8f9d2c8ef864e2c59e23787762fbbcb..5a5d8f643488ca57eb25fa858a4efcf5dc8e7a00 100644 (file)
@@ -317,6 +317,20 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
         msflags |= WS_BORDER;
     }
 
         msflags |= WS_BORDER;
     }
 
+    // calculate the value to return from WM_GETDLGCODE handler
+    if ( GetWindowStyleFlag() & wxWANTS_CHARS )
+    {
+        // want everything: i.e. all keys and WM_CHAR message
+        m_lDlgCode = DLGC_WANTARROWS | DLGC_WANTCHARS |
+                     DLGC_WANTTAB | DLGC_WANTMESSAGE;
+        
+    }
+    else
+    {
+        // default behaviour
+        m_lDlgCode = 0;
+    }
+
     MSWCreate(m_windowId, parent, wxCanvasClassName, this, NULL,
               pos.x, pos.y,
               WidthDefault(size.x), HeightDefault(size.y),
     MSWCreate(m_windowId, parent, wxCanvasClassName, this, NULL,
               pos.x, pos.y,
               WidthDefault(size.x), HeightDefault(size.y),
@@ -1756,11 +1770,12 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
             break;
 
         case WM_GETDLGCODE:
             break;
 
         case WM_GETDLGCODE:
-            if ( GetWindowStyleFlag() & wxWANTS_CHARS )
+            if ( m_lDlgCode )
             {
             {
-                rc.result = DLGC_WANTARROWS | DLGC_WANTCHARS | DLGC_WANTTAB;
+                rc.result = m_lDlgCode;
                 processed = TRUE;
             }
                 processed = TRUE;
             }
+            //else: get the dlg code from the DefWindowProc()
             break;
 
         case WM_KEYDOWN:
             break;
 
         case WM_KEYDOWN: