]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed wxTextCtrl::GetValue() bug for empty richedit ctrls (Marvin Aviles)
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 21 Nov 2000 18:01:27 +0000 (18:01 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 21 Nov 2000 18:01:27 +0000 (18:01 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8766 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/textctrl.cpp

index 0ff8cd44072ce49697b7be7ba17fa900341b93e9..86ec3d7af80c8e3792faa728923b06cf63c46ee3 100644 (file)
@@ -378,29 +378,34 @@ wxString wxTextCtrl::GetValue() const
 #if wxUSE_RICHEDIT
     if ( m_isRich )
     {
-        int len = GetWindowTextLength(GetHwnd()) + 1;
-
         wxString str;
-        wxChar *p = str.GetWriteBuf(len);
 
-        TEXTRANGE textRange;
-        textRange.chrg.cpMin = 0;
-        textRange.chrg.cpMax = -1;
-        textRange.lpstrText = p;
+        int len = GetWindowTextLength(GetHwnd());
+        if ( len )
+        {
+            // alloc one extra WORD as needed by the control
+            wxChar *p = str.GetWriteBuf(++len);
 
-        (void)SendMessage(GetHwnd(), EM_GETTEXTRANGE, 0, (LPARAM)&textRange);
+            TEXTRANGE textRange;
+            textRange.chrg.cpMin = 0;
+            textRange.chrg.cpMax = -1;
+            textRange.lpstrText = p;
 
-        // believe it or not, but EM_GETTEXTRANGE uses just CR ('\r') for the
-        // newlines which is neither Unix nor Windows style (Win95 with
-        // riched20.dll shows this behaviour) - convert it to something
-        // reasonable
-        for ( ; *p; p++ )
-        {
-            if ( *p == _T('\r') )
-                *p = _T('\n');
-        }
+            (void)SendMessage(GetHwnd(), EM_GETTEXTRANGE, 0, (LPARAM)&textRange);
 
-        str.UngetWriteBuf();
+            // believe it or not, but EM_GETTEXTRANGE uses just CR ('\r') for
+            // the newlines which is neither Unix nor Windows style (Win95 with
+            // riched20.dll shows this behaviour) - convert it to something
+            // reasonable
+            for ( ; *p; p++ )
+            {
+                if ( *p == _T('\r') )
+                    *p = _T('\n');
+            }
+
+            str.UngetWriteBuf();
+        }
+        //else: no text at all, leave the string empty
 
         return str;
     }
@@ -1074,7 +1079,7 @@ wxSize wxTextCtrl::DoGetBestSize() const
     int hText = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy);
     if ( m_windowStyle & wxTE_MULTILINE )
     {
-        hText *= wxMin(GetNumberOfLines(), 5);
+        hText *= wxMax(GetNumberOfLines(), 5);
     }
     //else: for single line control everything is ok