Implement undocumented listbox messages LB_INSERTSTRING_UPPER, LB_INSERTSTRING_LOWER...
authorFilip Navara <filip.navara@gmail.com>
Mon, 12 Dec 2005 19:49:08 +0000 (19:49 +0000)
committerFilip Navara <filip.navara@gmail.com>
Mon, 12 Dec 2005 19:49:08 +0000 (19:49 +0000)
svn path=/trunk/; revision=20107

reactos/lib/user32/controls/combo.c
reactos/lib/user32/controls/listbox.c
reactos/lib/user32/include/controls.h

index b786908..7e5f764 100644 (file)
@@ -1842,19 +1842,6 @@ static LRESULT COMBO_GetComboBoxInfo(LPHEADCOMBO lphc, COMBOBOXINFO *pcbi)
     return TRUE;
 }
 
-static char *strdupA(LPCSTR str)
-{
-    char *ret;
-    DWORD len;
-
-    if(!str) return NULL;
-
-    len = strlen(str);
-    ret = HeapAlloc(GetProcessHeap(), 0, len + 1);
-    memcpy(ret, str, len + 1);
-    return ret;
-}
-
 /***********************************************************************
  *           ComboWndProc_common
  *
@@ -2082,33 +2069,14 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
                /* fall through */
 #endif
        case CB_ADDSTRING:
-               if( unicode )
-                {
-                    if( lphc->dwStyle & CBS_LOWERCASE )
-                        strlwrW((LPWSTR)lParam);
-                    else if( lphc->dwStyle & CBS_UPPERCASE )
-                        struprW((LPWSTR)lParam);
-                    return SendMessageW(lphc->hWndLBox, LB_ADDSTRING, 0, lParam);
-                }
-                else /* unlike the unicode version, the ansi version does not overwrite
-                        the string if converting case */
-                {
-                    char *string = NULL;
-                    LRESULT ret;
-                    if( lphc->dwStyle & CBS_LOWERCASE )
-                    {
-                        string = strdupA((LPSTR)lParam);
-                        _strlwr(string);
-                    }
-                    else if( lphc->dwStyle & CBS_UPPERCASE )
-                    {
-                        string = strdupA((LPSTR)lParam);
-                        _strupr(string);
-                    }
-                    ret = SendMessageA(lphc->hWndLBox, LB_ADDSTRING, 0, string ? (LPARAM)string : lParam);
-                    HeapFree(GetProcessHeap(), 0, string);
-                    return ret;
-                }
+       {
+               UINT msg = LB_ADDSTRING;
+                if( lphc->dwStyle & CBS_LOWERCASE )
+                    msg = LB_ADDSTRING_LOWER;
+                else if( lphc->dwStyle & CBS_UPPERCASE )
+                    msg = LB_ADDSTRING_UPPER;
+                return SendMessageW(lphc->hWndLBox, msg, 0, lParam);
+        }
 #ifndef __REACTOS__
        case CB_INSERTSTRING16:
                wParam = (INT)(INT16)wParam;
@@ -2116,22 +2084,14 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
                /* fall through */
 #endif
        case CB_INSERTSTRING:
-               if( unicode )
-                {
-                    if( lphc->dwStyle & CBS_LOWERCASE )
-                        strlwrW((LPWSTR)lParam);
-                    else if( lphc->dwStyle & CBS_UPPERCASE )
-                        struprW((LPWSTR)lParam);
-                    return SendMessageW(lphc->hWndLBox, LB_INSERTSTRING, wParam, lParam);
-                }
-                else
-                {
-                    if( lphc->dwStyle & CBS_LOWERCASE )
-                        _strlwr((LPSTR)lParam);
-                    else if( lphc->dwStyle & CBS_UPPERCASE )
-                        _strupr((LPSTR)lParam);
-                    return SendMessageA(lphc->hWndLBox, LB_INSERTSTRING, wParam, lParam);
-                }
+       {
+               UINT msg = LB_INSERTSTRING;
+                if( lphc->dwStyle & CBS_LOWERCASE )
+                    msg = LB_INSERTSTRING_LOWER;
+                else if( lphc->dwStyle & CBS_UPPERCASE )
+                    msg = LB_INSERTSTRING_UPPER;
+                return SendMessageW(lphc->hWndLBox, msg, 0, lParam);
+        }
 #ifndef __REACTOS__
        case CB_DELETESTRING16:
 #endif
index 9c998a5..eeca21d 100644 (file)
@@ -2650,6 +2650,8 @@ static LRESULT WINAPI ListBoxWndProc_common( HWND hwnd, UINT msg,
         /* fall through */
 #endif
     case LB_ADDSTRING:
+    case LB_ADDSTRING_LOWER:
+    case LB_ADDSTRING_UPPER:
     {
         INT ret;
         LPWSTR textW;
@@ -2662,6 +2664,12 @@ static LRESULT WINAPI ListBoxWndProc_common( HWND hwnd, UINT msg,
             if((textW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR))))
                 MultiByteToWideChar(CP_ACP, 0, textA, -1, textW, countW);
         }
+        /* in the unicode the version, the string is really overwritten
+           during the converting case */
+        if (msg == LB_ADDSTRING_LOWER)
+            strlwrW(textW);
+        else if (msg == LB_ADDSTRING_UPPER)
+            struprW(textW);
         wParam = LISTBOX_FindStringPos( descr, textW, FALSE );
         ret = LISTBOX_InsertString( descr, wParam, textW );
         if (!unicode && HAS_STRINGS(descr))
@@ -2676,6 +2684,8 @@ static LRESULT WINAPI ListBoxWndProc_common( HWND hwnd, UINT msg,
         /* fall through */
 #endif
     case LB_INSERTSTRING:
+    case LB_INSERTSTRING_UPPER:
+    case LB_INSERTSTRING_LOWER:
     {
         INT ret;
         LPWSTR textW;
@@ -2688,6 +2698,12 @@ static LRESULT WINAPI ListBoxWndProc_common( HWND hwnd, UINT msg,
             if((textW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR))))
                 MultiByteToWideChar(CP_ACP, 0, textA, -1, textW, countW);
         }
+        /* in the unicode the version, the string is really overwritten
+           during the converting case */
+        if (msg == LB_INSERTSTRING_LOWER)
+            strlwrW(textW);
+        else if (msg == LB_INSERTSTRING_UPPER)
+            struprW(textW);
         ret = LISTBOX_InsertString( descr, wParam, textW );
         if(!unicode && HAS_STRINGS(descr))
             HeapFree(GetProcessHeap(), 0, textW);
index 69ddb55..772424a 100644 (file)
@@ -110,4 +110,9 @@ typedef struct
 
 extern BOOL COMBO_FlipListbox( LPHEADCOMBO, BOOL, BOOL );
 
+#define LB_INSERTSTRING_UPPER     0x1AA
+#define LB_INSERTSTRING_LOWER     0x1AB
+#define LB_ADDSTRING_UPPER        0x1AC
+#define LB_ADDSTRING_LOWER        0x1AD
+
 #endif /* _ROS_CONTROLS_H */