#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
*/
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);
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 );
}
case WM_NCDESTROY:
COMBO_NCDestroy(lphc);
+#ifdef __REACTOS__
+ NtUserSetWindowFNID(hwnd, FNID_DESTROY);
+#endif
break;/* -> DefWindowProc */
case WM_CREATE:
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:
{
/* Combo messages */
-#ifndef __REACTOS__
- case CB_ADDSTRING16:
- if( CB_HASSTRINGS(lphc) ) lParam = (LPARAM)MapSL(lParam);
- /* fall through */
-#endif
case CB_ADDSTRING:
if( unicode )
{
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 )
{
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) )
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;
- RECT16 *r16 = (RECT16 *)lParam;
- CBGetDroppedControlRect( lphc, &r );
- r16->left = r.left;
- r16->top = r.top;
- r16->right = r.right;
- r16->bottom = r.bottom;
- }
- 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 )
{
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 )
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;
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:
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)