[User32]
[reactos.git] / reactos / dll / win32 / user32 / controls / combo.c
index 14e358a..adeac61 100644 (file)
@@ -74,31 +74,19 @@ static UINT CBitHeight, CBitWidth;
 #define COMBO_EDITBUTTONSPACE()  0
 #define EDIT_CONTROL_PADDING()   1
 
-static LRESULT WINAPI ComboWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
-static LRESULT WINAPI ComboWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
-
 /*********************************************************************
  * combo class descriptor
  */
+static const WCHAR comboboxW[] = {'C','o','m','b','o','B','o','x',0};
 const struct builtin_class_descr COMBO_builtin_class =
 {
-#ifdef __REACTOS__
-    L"ComboBox",           /* name */
-    CS_PARENTDC | CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS, /* style  */
-    (WNDPROC) ComboWndProcW,        /* procW */
-    (WNDPROC) ComboWndProcA,        /* procA */
-    sizeof(HEADCOMBO *),  /* extra */
-    (LPCWSTR) IDC_ARROW,            /* cursor */
-    0                     /* brush */
-#else
-    "ComboBox",           /* name */
+    comboboxW,            /* name */
     CS_PARENTDC | CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW, /* style  */
     ComboWndProcA,        /* procA */
     ComboWndProcW,        /* procW */
     sizeof(HEADCOMBO *),  /* extra */
     IDC_ARROW,            /* cursor */
     0                     /* brush */
-#endif
 };
 
 
@@ -167,18 +155,18 @@ static LRESULT COMBO_NCCreate(HWND hwnd, LONG style)
        /* some braindead apps do try to use scrollbar/border flags */
 
        lphc->dwStyle = style & ~(WS_BORDER | WS_HSCROLL | WS_VSCROLL);
-        SetWindowLongW( hwnd, GWL_STYLE, style & ~(WS_BORDER | WS_HSCROLL | WS_VSCROLL) );
+        SetWindowLongPtrW( hwnd, GWL_STYLE, style & ~(WS_BORDER | WS_HSCROLL | WS_VSCROLL) );
 
        /*
         * We also have to remove the client edge style to make sure
         * we don't end-up with a non client area.
         */
-        SetWindowLongW( hwnd, GWL_EXSTYLE,
-                        GetWindowLongW( hwnd, GWL_EXSTYLE ) & ~WS_EX_CLIENTEDGE );
+        SetWindowLongPtrW( hwnd, GWL_EXSTYLE,
+                        GetWindowLongPtrW( hwnd, GWL_EXSTYLE ) & ~WS_EX_CLIENTEDGE );
 
        if( !(style & (CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE)) )
               lphc->dwStyle |= CBS_HASSTRINGS;
-       if( !(GetWindowLongW( hwnd, GWL_EXSTYLE ) & WS_EX_NOPARENTNOTIFY) )
+       if( !(GetWindowLongPtrW( hwnd, GWL_EXSTYLE ) & WS_EX_NOPARENTNOTIFY) )
              lphc->wState |= CBF_NOTIFY;
 
         TRACE("[%p], style = %08x\n", lphc, lphc->dwStyle );
@@ -444,14 +432,11 @@ static void CBCalcPlacement(
   if (lprEdit->right < lprEdit->left)
     lprEdit->right = lprEdit->left;
 
-  TRACE("\ttext\t= (%ld,%ld-%ld,%ld)\n",
-       lprEdit->left, lprEdit->top, lprEdit->right, lprEdit->bottom);
+  TRACE("\ttext\t= (%s)\n", wine_dbgstr_rect(lprEdit));
 
-  TRACE("\tbutton\t= (%ld,%ld-%ld,%ld)\n",
-       lprButton->left, lprButton->top, lprButton->right, lprButton->bottom);
+  TRACE("\tbutton\t= (%s)\n", wine_dbgstr_rect(lprButton));
 
-  TRACE("\tlbox\t= (%ld,%ld-%ld,%ld)\n",
-       lprLB->left, lprLB->top, lprLB->right, lprLB->bottom );
+  TRACE("\tlbox\t= (%s)\n", wine_dbgstr_rect(lprLB));
 }
 
 /***********************************************************************
@@ -494,20 +479,20 @@ static LRESULT COMBO_WindowPosChanging(
     /*
      * Resizing a combobox has another side effect, it resizes the dropped
      * rectangle as well. However, it does it only if the new height for the
-     * combobox is different from the height it should have. In other words,
+     * combobox is more than the height it should have. In other words,
      * if the application resizing the combobox only had the intention to resize
      * the actual control, for example, to do the layout of a dialog that is
      * resized, the height of the dropdown is not changed.
      */
-    if (posChanging->cy != newComboHeight)
+    if (posChanging->cy > newComboHeight)
     {
-       TRACE("posChanging->cy=%d, newComboHeight=%d, oldbot=%ld, oldtop=%ld\n",
+       TRACE("posChanging->cy=%d, newComboHeight=%d, oldbot=%d, oldtop=%d\n",
              posChanging->cy, newComboHeight, lphc->droppedRect.bottom,
              lphc->droppedRect.top);
       lphc->droppedRect.bottom = lphc->droppedRect.top + posChanging->cy - newComboHeight;
 
-      posChanging->cy = newComboHeight;
     }
+    posChanging->cy = newComboHeight;
   }
 
   return 0;
@@ -783,7 +768,7 @@ static void CBPaintText(
         clipRegion=NULL;
        }
 
-       if (!(IsWindowEnabled(lphc->self) & WS_DISABLED)) itemState |= ODS_DISABLED;
+       if (!IsWindowEnabled(lphc->self)) itemState |= ODS_DISABLED;
 
        dis.CtlType     = ODT_COMBOBOX;
        dis.CtlID       = ctlid;
@@ -898,16 +883,9 @@ static HBRUSH COMBO_PrepareColors(
   }
   else
   {
-    if (lphc->wState & CBF_EDIT)
-    {
+      /* FIXME: In which cases WM_CTLCOLORLISTBOX should be sent? */
       hBkgBrush = (HBRUSH)SendMessageW(lphc->owner, WM_CTLCOLOREDIT,
                                       (WPARAM)hDC, (LPARAM)lphc->self );
-    }
-    else
-    {
-      hBkgBrush = (HBRUSH)SendMessageW(lphc->owner, WM_CTLCOLORLISTBOX,
-                                      (WPARAM)hDC, (LPARAM)lphc->self );
-    }
   }
 
   /*
@@ -1061,8 +1039,8 @@ static void CBUpdateEdit( LPHEADCOMBO lphc , INT index )
  */
 static void CBDropDown( LPHEADCOMBO lphc )
 {
-   HMONITOR monitor;
-   MONITORINFO mon_info;
+    HMONITOR monitor;
+    MONITORINFO mon_info;
    RECT rect,r;
    int nItems = 0;
    int nDroppedHeight;
@@ -1128,7 +1106,7 @@ static void CBDropDown( LPHEADCOMBO lphc )
       {
             if (nItems < 5)
                 nDroppedHeight = (nItems+1)*nIHeight;
-            else
+            else if (nDroppedHeight < 6*nIHeight)
                 nDroppedHeight = 6*nIHeight;
       }
    }
@@ -1141,7 +1119,7 @@ static void CBDropDown( LPHEADCOMBO lphc )
    if( (rect.bottom + nDroppedHeight) >= mon_info.rcWork.bottom )
       rect.bottom = rect.top - nDroppedHeight;
 
-   SetWindowPos( lphc->hWndLBox, HWND_TOP, rect.left, rect.bottom,
+   SetWindowPos( lphc->hWndLBox, HWND_TOPMOST, rect.left, rect.bottom,
                 lphc->droppedRect.right - lphc->droppedRect.left,
                 nDroppedHeight,
                 SWP_NOACTIVATE | SWP_SHOWWINDOW);
@@ -1233,7 +1211,7 @@ BOOL COMBO_FlipListbox( LPHEADCOMBO lphc, BOOL ok, BOOL bRedrawButton )
  */
 static void CBRepaintButton( LPHEADCOMBO lphc )
    {
-  NtUserInvalidateRect(lphc->self, &lphc->buttonRect, TRUE);
+  InvalidateRect(lphc->self, &lphc->buttonRect, TRUE);
   UpdateWindow(lphc->self);
 }
 
@@ -1252,9 +1230,7 @@ static void COMBO_SetFocus( LPHEADCOMBO lphc )
        /* lphc->wState |= CBF_FOCUSED;  */
 
        if( !(lphc->wState & CBF_EDIT) )
-       {
-            NtUserInvalidateRect(lphc->self, &lphc->textRect, TRUE);
-       }
+        InvalidateRect(lphc->self, &lphc->textRect, TRUE);
 
        CB_NOTIFY( lphc, CBN_SETFOCUS );
        lphc->wState |= CBF_FOCUSED;
@@ -1276,11 +1252,11 @@ static void COMBO_KillFocus( LPHEADCOMBO lphc )
            if( CB_GETTYPE(lphc) == CBS_DROPDOWNLIST )
                SendMessageW(lphc->hWndLBox, LB_CARETOFF, 0, 0);
 
-           lphc->wState &= ~CBF_FOCUSED;
+          lphc->wState &= ~CBF_FOCUSED;
 
            /* redraw text */
-           if( !(lphc->wState & CBF_EDIT) )
-                NtUserInvalidateRect(lphc->self, &lphc->textRect, TRUE);
+          if( !(lphc->wState & CBF_EDIT) )
+            InvalidateRect(lphc->self, &lphc->textRect, TRUE);
 
            CB_NOTIFY( lphc, CBN_KILLFOCUS );
        }
@@ -1298,12 +1274,12 @@ static LRESULT COMBO_Command( LPHEADCOMBO lphc, WPARAM wParam, HWND hWnd )
 
        switch( HIWORD(wParam) >> 8 )
        {
-        case (EN_SETFOCUS >> 8):
+          case (EN_SETFOCUS >> 8):
 
                TRACE("[%p]: edit [%p] got focus\n", lphc->self, lphc->hWndEdit );
 
-               COMBO_SetFocus( lphc );
-               break;
+               COMBO_SetFocus( lphc );
+               break;
 
           case (EN_KILLFOCUS >> 8):
 
@@ -1366,7 +1342,15 @@ static LRESULT COMBO_Command( LPHEADCOMBO lphc, WPARAM wParam, HWND hWnd )
 
                 TRACE("[%p]: lbox selection change [%x]\n", lphc->self, lphc->wState );
 
-                CB_NOTIFY( lphc, CBN_SELCHANGE );
+                /* do not roll up if selection is being tracked
+                 * by arrow keys in the dropdown listbox */
+                if (!(lphc->wState & CBF_NOROLLUP))
+                {
+                    CBRollUp( lphc, (HIWORD(wParam) == LBN_SELCHANGE), TRUE );
+                }
+                else lphc->wState &= ~CBF_NOROLLUP;
+
+               CB_NOTIFY( lphc, CBN_SELCHANGE );
 
                if( HIWORD(wParam) == LBN_SELCHANGE)
                {
@@ -1379,17 +1363,11 @@ static LRESULT COMBO_Command( LPHEADCOMBO lphc, WPARAM wParam, HWND hWnd )
                       SendMessageW(lphc->hWndEdit, EM_SETSEL, 0, (LPARAM)(-1));
                   }
                   else
-                      NtUserInvalidateRect(lphc->self, &lphc->textRect, TRUE);
+                   {
+                      InvalidateRect(lphc->self, &lphc->textRect, TRUE);
+                       UpdateWindow(lphc->self);
+                   }
                }
-
-               /* do not roll up if selection is being tracked
-                * by arrowkeys in the dropdown listbox */
-                if( ((lphc->wState & CBF_DROPPED) && !(lphc->wState & CBF_NOROLLUP)) )
-                {
-                   CBRollUp( lphc, (HIWORD(wParam) == LBN_SELCHANGE), TRUE );
-                }
-               else lphc->wState &= ~CBF_NOROLLUP;
-
                 break;
 
           case LBN_SETFOCUS:
@@ -1699,7 +1677,7 @@ static LRESULT COMBO_SelectString( LPHEADCOMBO lphc, INT start, LPARAM pText, BO
        CBUpdateEdit( lphc, index );
      else
      {
-       NtUserInvalidateRect(lphc->self, &lphc->textRect, TRUE);
+       InvalidateRect(lphc->self, &lphc->textRect, TRUE);
      }
    }
    return (LRESULT)index;
@@ -1854,13 +1832,23 @@ static char *strdupA(LPCSTR str)
 
 /***********************************************************************
  *           ComboWndProc_common
- *
- * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/comboboxes/comboboxes.asp
  */
-static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
-                                    WPARAM wParam, LPARAM lParam, BOOL unicode )
+LRESULT WINAPI ComboWndProc_common( HWND hwnd, UINT message,
+                                  WPARAM wParam, LPARAM lParam, BOOL unicode )
 {
       LPHEADCOMBO lphc = (LPHEADCOMBO)GetWindowLongPtrW( hwnd, 0 );
+#ifdef __REACTOS__
+      PWND pWnd;
+
+      pWnd = ValidateHwnd(hwnd);
+      if (pWnd)
+      {
+         if (!pWnd->fnid)
+         {
+            NtUserSetWindowFNID(hwnd, FNID_COMBOBOX);
+         }
+      }    
+#endif    
 
       TRACE("[%p]: msg %s wp %08lx lp %08lx\n",
             hwnd, SPY_GetMsgName(message, hwnd), wParam, lParam );
@@ -1879,6 +1867,9 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
        }
        case WM_NCDESTROY:
                COMBO_NCDestroy(lphc);
+#ifdef __REACTOS__
+                NtUserSetWindowFNID(hwnd, FNID_DESTROY);
+#endif
                break;/* -> DefWindowProc */
 
        case WM_CREATE:
@@ -1934,7 +1925,7 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
         /* fall through */
        case WM_SIZE:
                if( lphc->hWndLBox &&
-                  !(lphc->wState & CBF_NORESIZE) ) COMBO_Size( lphc, message == WM_SIZE );
+                 !(lphc->wState & CBF_NORESIZE) ) COMBO_Size( lphc, message == WM_SIZE );
                return  TRUE;
        case WM_SETFONT:
                COMBO_Font( lphc, (HFONT)wParam, (BOOL)lParam );
@@ -1942,29 +1933,27 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
        case WM_GETFONT:
                return  (LRESULT)lphc->hFont;
        case WM_SETFOCUS:
-               if( lphc->wState & CBF_EDIT )
-                   SetFocus( lphc->hWndEdit );
-               else
-                   COMBO_SetFocus( lphc );
+               if( lphc->wState & CBF_EDIT ) {
+                   SetFocus( lphc->hWndEdit );
+                   /* The first time focus is received, select all the text */
+                   if( !(lphc->wState & CBF_BEENFOCUSED) ) {
+                       SendMessageW(lphc->hWndEdit, EM_SETSEL, 0, -1);
+                       lphc->wState |= CBF_BEENFOCUSED;
+                   }
+               }
+                else
+                    COMBO_SetFocus( lphc );
                return  TRUE;
        case WM_KILLFOCUS:
             {
-#ifdef __REACTOS__
-                HWND hwndFocus = (HWND)wParam;
-#else
                 HWND hwndFocus = WIN_GetFullHandle( (HWND)wParam );
-#endif
                if( !hwndFocus ||
                    (hwndFocus != lphc->hWndEdit && hwndFocus != lphc->hWndLBox ))
                    COMBO_KillFocus( lphc );
                return  TRUE;
             }
        case WM_COMMAND:
-#ifdef __REACTOS__
-               return  COMBO_Command( lphc, wParam, (HWND)lParam);
-#else
                return  COMBO_Command( lphc, wParam, WIN_GetFullHandle( (HWND)lParam ) );
-#endif
        case WM_GETTEXT:
             return unicode ? COMBO_GetTextW( lphc, wParam, (LPWSTR)lParam )
                            : COMBO_GetTextA( lphc, wParam, (LPSTR)lParam );
@@ -2009,7 +1998,7 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
                EnableWindow( lphc->hWndLBox, (BOOL)wParam );
 
                /* Force the control to repaint when the enabled state changes. */
-               NtUserInvalidateRect(lphc->self, NULL, TRUE);
+               InvalidateRect(lphc->self, NULL, TRUE);
                return  TRUE;
        case WM_SETREDRAW:
                if( wParam )
@@ -2027,23 +2016,23 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
                        COMBO_FlipListbox( lphc, FALSE, FALSE );
                 return  0;
 
-       case WM_CHAR:
-       case WM_IME_CHAR:
        case WM_KEYDOWN:
-       {
-               HWND hwndTarget;
-
                if ((wParam == VK_RETURN || wParam == VK_ESCAPE) &&
                     (lphc->wState & CBF_DROPPED))
                {
                   CBRollUp( lphc, wParam == VK_RETURN, FALSE );
                   return TRUE;
                }
-               else if ((wParam == VK_F4) && !(lphc->wState & CBF_EUI))
-               {
-                  COMBO_FlipListbox( lphc, FALSE, FALSE );
-                  return TRUE;
-               }
+               else if ((wParam == VK_F4) && !(lphc->wState & CBF_EUI))
+               {
+                  COMBO_FlipListbox( lphc, FALSE, FALSE );
+                  return TRUE;
+               }
+               /* fall through */
+       case WM_CHAR:
+       case WM_IME_CHAR:
+        {
+               HWND hwndTarget;
 
                if( lphc->wState & CBF_EDIT )
                    hwndTarget = lphc->hWndEdit;
@@ -2076,11 +2065,6 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
 
        /* Combo messages */
 
-#ifndef __REACTOS__
-       case CB_ADDSTRING16:
-               if( CB_HASSTRINGS(lphc) ) lParam = (LPARAM)MapSL(lParam);
-               /* fall through */
-#endif
        case CB_ADDSTRING:
                if( unicode )
                 {
@@ -2111,12 +2095,6 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
                     HeapFree(GetProcessHeap(), 0, string);
                     return ret;
                 }
-#ifndef __REACTOS__
-       case CB_INSERTSTRING16:
-               wParam = (INT)(INT16)wParam;
-               if( CB_HASSTRINGS(lphc) ) lParam = (LPARAM)MapSL(lParam);
-               /* fall through */
-#endif
        case CB_INSERTSTRING:
                if( unicode )
                 {
@@ -2135,57 +2113,23 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
 
                     return SendMessageA(lphc->hWndLBox, LB_INSERTSTRING, wParam, lParam);
                 }
-#ifndef __REACTOS__
-       case CB_DELETESTRING16:
-#endif
        case CB_DELETESTRING:
                return unicode ? SendMessageW(lphc->hWndLBox, LB_DELETESTRING, wParam, 0) :
                                 SendMessageA(lphc->hWndLBox, LB_DELETESTRING, wParam, 0);
-#ifndef __REACTOS__
-       case CB_SELECTSTRING16:
-               wParam = (INT)(INT16)wParam;
-               if( CB_HASSTRINGS(lphc) ) lParam = (LPARAM)MapSL(lParam);
-               /* fall through */
-#endif
        case CB_SELECTSTRING:
                return COMBO_SelectString(lphc, (INT)wParam, lParam, unicode);
-#ifndef __REACTOS__
-       case CB_FINDSTRING16:
-               wParam = (INT)(INT16)wParam;
-               if( CB_HASSTRINGS(lphc) ) lParam = (LPARAM)MapSL(lParam);
-               /* fall through */
-#endif
        case CB_FINDSTRING:
                return unicode ? SendMessageW(lphc->hWndLBox, LB_FINDSTRING, wParam, lParam) :
                                 SendMessageA(lphc->hWndLBox, LB_FINDSTRING, wParam, lParam);
-#ifndef __REACTOS__
-       case CB_FINDSTRINGEXACT16:
-               wParam = (INT)(INT16)wParam;
-               if( CB_HASSTRINGS(lphc) ) lParam = (LPARAM)MapSL(lParam);
-               /* fall through */
-#endif
        case CB_FINDSTRINGEXACT:
                return unicode ? SendMessageW(lphc->hWndLBox, LB_FINDSTRINGEXACT, wParam, lParam) :
                                 SendMessageA(lphc->hWndLBox, LB_FINDSTRINGEXACT, wParam, lParam);
-#ifndef __REACTOS__
-       case CB_SETITEMHEIGHT16:
-               wParam = (INT)(INT16)wParam;    /* signed integer */
-               /* fall through */
-#endif
        case CB_SETITEMHEIGHT:
                return  COMBO_SetItemHeight( lphc, (INT)wParam, (INT)lParam);
-#ifndef __REACTOS__
-       case CB_GETITEMHEIGHT16:
-               wParam = (INT)(INT16)wParam;
-               /* fall through */
-#endif
        case CB_GETITEMHEIGHT:
                if( (INT)wParam >= 0 )  /* listbox item */
                     return SendMessageW(lphc->hWndLBox, LB_GETITEMHEIGHT, wParam, 0);
                 return  CBGetTextAreaHeight(hwnd, lphc);
-#ifndef __REACTOS__
-       case CB_RESETCONTENT16:
-#endif
        case CB_RESETCONTENT:
                SendMessageW(lphc->hWndLBox, LB_RESETCONTENT, 0, 0);
                 if( (lphc->wState & CBF_EDIT) && CB_HASSTRINGS(lphc) )
@@ -2194,7 +2138,7 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
                     SendMessageW(lphc->hWndEdit, WM_SETTEXT, 0, (LPARAM)empty_stringW);
                }
                 else
-                    NtUserInvalidateRect(lphc->self, NULL, TRUE);
+                    InvalidateRect(lphc->self, NULL, TRUE);
                return  TRUE;
        case CB_INITSTORAGE:
                return SendMessageW(lphc->hWndLBox, LB_INITSTORAGE, wParam, lParam);
@@ -2216,36 +2160,15 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
                if( (CB_GETTYPE(lphc) != CBS_SIMPLE) &&
                    (INT)wParam < 32768 ) lphc->droppedWidth = (INT)wParam;
                return  CB_ERR;
-#ifndef __REACTOS__
-       case CB_GETDROPPEDCONTROLRECT16:
-               lParam = (LPARAM)MapSL(lParam);
-               if( lParam )
-               {
-                   RECT        r;
-                   CBGetDroppedControlRect( lphc, &r );
-                   CONV_RECT32TO16( &r, (LPRECT16)lParam );
-               }
-               return  CB_OKAY;
-#endif
        case CB_GETDROPPEDCONTROLRECT:
                if( lParam ) CBGetDroppedControlRect(lphc, (LPRECT)lParam );
                return  CB_OKAY;
-#ifndef __REACTOS__
-       case CB_GETDROPPEDSTATE16:
-#endif
        case CB_GETDROPPEDSTATE:
                return  (lphc->wState & CBF_DROPPED) ? TRUE : FALSE;
-#ifndef __REACTOS__
-       case CB_DIR16:
-               return SendMessageA(lphc->hWndLBox, LB_DIR16, wParam, lParam);
-#endif
        case CB_DIR:
                return unicode ? SendMessageW(lphc->hWndLBox, LB_DIR, wParam, lParam) :
                                 SendMessageA(lphc->hWndLBox, LB_DIR, wParam, lParam);
 
-#ifndef __REACTOS__
-       case CB_SHOWDROPDOWN16:
-#endif
        case CB_SHOWDROPDOWN:
                if( CB_GETTYPE(lphc) != CBS_SIMPLE )
                {
@@ -2259,21 +2182,10 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
                            CBRollUp( lphc, FALSE, TRUE );
                }
                return  TRUE;
-#ifndef __REACTOS__
-       case CB_GETCOUNT16:
-#endif
        case CB_GETCOUNT:
                return SendMessageW(lphc->hWndLBox, LB_GETCOUNT, 0, 0);
-#ifndef __REACTOS__
-       case CB_GETCURSEL16:
-#endif
        case CB_GETCURSEL:
                return SendMessageW(lphc->hWndLBox, LB_GETCURSEL, 0, 0);
-#ifndef __REACTOS__
-       case CB_SETCURSEL16:
-               wParam = (INT)(INT16)wParam;
-               /* fall through */
-#endif
        case CB_SETCURSEL:
                lParam = SendMessageW(lphc->hWndLBox, LB_SETCURSEL, wParam, 0);
                if( lParam >= 0 )
@@ -2283,61 +2195,29 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
                if( lphc->wState & CBF_EDIT )
                    CBUpdateEdit( lphc, (INT)wParam );
                else
-                   NtUserInvalidateRect(lphc->self, &lphc->textRect, TRUE);
+                   InvalidateRect(lphc->self, &lphc->textRect, TRUE);
                lphc->wState &= ~CBF_SELCHANGE;
                return  lParam;
-#ifndef __REACTOS__
-       case CB_GETLBTEXT16:
-               wParam = (INT)(INT16)wParam;
-               lParam = (LPARAM)MapSL(lParam);
-               /* fall through */
-#endif
        case CB_GETLBTEXT:
                return unicode ? SendMessageW(lphc->hWndLBox, LB_GETTEXT, wParam, lParam) :
                                 SendMessageA(lphc->hWndLBox, LB_GETTEXT, wParam, lParam);
-#ifndef __REACTOS__
-       case CB_GETLBTEXTLEN16:
-               wParam = (INT)(INT16)wParam;
-               /* fall through */
-#endif
        case CB_GETLBTEXTLEN:
                 return unicode ? SendMessageW(lphc->hWndLBox, LB_GETTEXTLEN, wParam, 0) :
                                  SendMessageA(lphc->hWndLBox, LB_GETTEXTLEN, wParam, 0);
-#ifndef __REACTOS__
-       case CB_GETITEMDATA16:
-               wParam = (INT)(INT16)wParam;
-               /* fall through */
-#endif
        case CB_GETITEMDATA:
                return SendMessageW(lphc->hWndLBox, LB_GETITEMDATA, wParam, 0);
-#ifndef __REACTOS__
-       case CB_SETITEMDATA16:
-               wParam = (INT)(INT16)wParam;
-               /* fall through */
-#endif
        case CB_SETITEMDATA:
                return SendMessageW(lphc->hWndLBox, LB_SETITEMDATA, wParam, lParam);
-#ifndef __REACTOS__
-       case CB_GETEDITSEL16:
-               wParam = lParam = 0;   /* just in case */
-               /* fall through */
-#endif
        case CB_GETEDITSEL:
                /* Edit checks passed parameters itself */
                if( lphc->wState & CBF_EDIT )
                    return SendMessageW(lphc->hWndEdit, EM_GETSEL, wParam, lParam);
                return  CB_ERR;
-#ifndef __REACTOS__
-       case CB_SETEDITSEL16:
-#endif
        case CB_SETEDITSEL:
                if( lphc->wState & CBF_EDIT )
                     return SendMessageW(lphc->hWndEdit, EM_SETSEL,
                          (INT)(INT16)LOWORD(lParam), (INT)(INT16)HIWORD(lParam) );
                return  CB_ERR;
-#ifndef __REACTOS__
-       case CB_SETEXTENDEDUI16:
-#endif
        case CB_SETEXTENDEDUI:
                 if( CB_GETTYPE(lphc) == CBS_SIMPLE )
                     return  CB_ERR;
@@ -2345,17 +2225,14 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
                    lphc->wState |= CBF_EUI;
                else lphc->wState &= ~CBF_EUI;
                return  CB_OKAY;
-#ifndef __REACTOS__
-       case CB_GETEXTENDEDUI16:
-#endif
        case CB_GETEXTENDEDUI:
                return  (lphc->wState & CBF_EUI) ? TRUE : FALSE;
        case CB_GETCOMBOBOXINFO:
                return COMBO_GetComboBoxInfo(lphc, (COMBOBOXINFO *)lParam);
-        case CB_LIMITTEXT:
-                if( lphc->wState & CBF_EDIT )
-                   return SendMessageW(lphc->hWndEdit, EM_LIMITTEXT, wParam, lParam);
-                break;
+       case CB_LIMITTEXT:
+               if( lphc->wState & CBF_EDIT )
+                       return SendMessageW(lphc->hWndEdit, EM_LIMITTEXT, wParam, lParam);
+                break; // ReactOS!!! removed at revision 38715
 
     case WM_UPDATEUISTATE:
         if (unicode)
@@ -2387,7 +2264,7 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
  * This is just a wrapper for the real ComboWndProc which locks/unlocks
  * window structs.
  */
-static LRESULT WINAPI ComboWndProcA( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
+LRESULT WINAPI ComboWndProcA( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
 {
     if (!IsWindow(hwnd)) return 0;
     return ComboWndProc_common( hwnd, message, wParam, lParam, FALSE );
@@ -2396,7 +2273,7 @@ static LRESULT WINAPI ComboWndProcA( HWND hwnd, UINT message, WPARAM wParam, LPA
 /***********************************************************************
  *           ComboWndProcW
  */
-static LRESULT WINAPI ComboWndProcW( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
+LRESULT WINAPI ComboWndProcW( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
 {
     if (!IsWindow(hwnd)) return 0;
     return ComboWndProc_common( hwnd, message, wParam, lParam, TRUE );