#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
};
/* 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 );
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));
}
/***********************************************************************
/*
* 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;
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;
}
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 );
- }
}
/*
*/
static void CBDropDown( LPHEADCOMBO lphc )
{
- HMONITOR monitor;
- MONITORINFO mon_info;
+ HMONITOR monitor;
+ MONITORINFO mon_info;
RECT rect,r;
int nItems = 0;
int nDroppedHeight;
{
if (nItems < 5)
nDroppedHeight = (nItems+1)*nIHeight;
- else
+ else if (nDroppedHeight < 6*nIHeight)
nDroppedHeight = 6*nIHeight;
}
}
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);
*/
static void CBRepaintButton( LPHEADCOMBO lphc )
{
- NtUserInvalidateRect(lphc->self, &lphc->buttonRect, TRUE);
+ InvalidateRect(lphc->self, &lphc->buttonRect, TRUE);
UpdateWindow(lphc->self);
}
/* 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;
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 );
}
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):
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)
{
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:
CBUpdateEdit( lphc, index );
else
{
- NtUserInvalidateRect(lphc->self, &lphc->textRect, TRUE);
+ InvalidateRect(lphc->self, &lphc->textRect, TRUE);
}
}
return (LRESULT)index;
/***********************************************************************
* 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 );
}
case WM_NCDESTROY:
COMBO_NCDestroy(lphc);
+#ifdef __REACTOS__
+ NtUserSetWindowFNID(hwnd, FNID_DESTROY);
+#endif
break;/* -> DefWindowProc */
case WM_CREATE:
/* 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 );
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 );
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 )
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;
/* 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) )
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);
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 )
{
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 )
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;
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)
* 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 );
/***********************************************************************
* 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 );