36 #include "wine/unicode.h" 45 #define LB_ARRAY_GRANULARITY 16 48 #define LB_SCROLL_TIMEOUT 50 54 #define LBS_DISPLAYCHANGED 0x80000000 97 #define IS_OWNERDRAW(descr) \ 98 ((descr)->style & (LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE)) 100 #define HAS_STRINGS(descr) \ 101 (!IS_OWNERDRAW(descr) || ((descr)->style & LBS_HASSTRINGS)) 104 #define IS_MULTISELECT(descr) \ 105 ((descr)->style & (LBS_MULTIPLESEL|LBS_EXTENDEDSEL) && \ 106 !((descr)->style & LBS_NOSEL)) 108 #define SEND_NOTIFICATION(descr,code) \ 109 (SendMessageW( (descr)->owner, WM_COMMAND, \ 110 MAKEWPARAM( GetWindowLongPtrW((descr->self),GWLP_ID), (code)), (LPARAM)(descr->self) )) 112 #define ISWIN31 (LOWORD(GetVersion()) == 0x0a03) 137 for (
i =
descr->top_item,
height = 0; i < descr->nb_items;
i++)
141 if (
i ==
descr->top_item)
return 1;
142 else return i -
descr->top_item;
160 if (max < descr->nb_items - 1)
max++;
270 TRACE(
"setting top item %d, scroll %d\n",
index, scroll);
288 diff -=
descr->items[
i].height;
293 diff +=
descr->items[
i].height;
349 if(
descr->item_height != 0)
350 remaining =
descr->height %
descr->item_height;
353 if ((
descr->height >
descr->item_height) && remaining)
355 TRACE(
"[%p]: changing height %d -> %d\n",
443 if (!
descr->nb_items)
return -1;
466 if (
y >=
descr->item_height *
descr->page_size)
return -1;
475 if (
index < 0)
return 0;
503 ERR(
"called with an out of bounds index %d(%d) in owner draw, Not good.\n",
index,
descr->nb_items);
522 if (!ignoreFocus && (
descr->focus_item ==
index) &&
528 TRACE(
"[%p]: drawitem %d (%s) action=%02x state=%02x rect=%s\n",
550 TRACE(
"[%p]: painting %d (%s) action=%02x rect=%s\n",
574 if (!ignoreFocus && (
descr->focus_item ==
index) &&
618 HBRUSH
hbrush, oldBrush = 0;
655 if (
descr->focus_item == -1)
return;
656 if (!
descr->caret_on || !
descr->in_focus)
return;
724 for (
i = 0;
i <
descr->nb_tabs;
i++)
758 WARN(
"got an invalid buffer (Delphi bug?)\n" );
823 return exact ? -1 :
max;
847 if (*
str !=
'[')
res = -1;
848 else if (
p[1] ==
'-')
855 if (
str[1] ==
'-')
res = 1;
897 #define CHECK_DRIVE(item) \ 898 if ((item)->str[0] == '[') \ 900 if (!strncmpiW( str, (item)->str+1, len )) return i; \ 901 if (((item)->str[1] == '-') && !strncmpiW(str, (item)->str+2, len)) \ 974 RECT focusRect = {-1, -1, -1, -1};
976 HBRUSH
hbrush, oldBrush = 0;
983 else if (
descr->horz_pos)
995 if (!
descr->nb_items && (
descr->focus_item != -1) &&
descr->caret_on &&
1009 for (
i =
descr->top_item; i < descr->nb_items;
i++)
1017 if (
i ==
descr->focus_item)
1040 col_pos =
descr->page_size - 1;
1050 if (focusRect.
top != focusRect.
bottom &&
1082 HRGN cliprgn = region;
1097 r.right - cxEdge,
r.bottom - cyEdge);
1098 if (region != (HRGN)1)
1173 else return descr->item_height;
1223 if (!(diff =
descr->horz_pos -
pos))
return;
1289 const char *alphabet =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
1296 ERR(
"unable to get DC.\n" );
1304 descr->avg_char_width = (sz.
cx / 26 + 1) / 2;
1320 TRACE(
"current top item %d, index %d, fully %d\n",
descr->top_item,
index, fully);
1326 if (!fully) cols +=
descr->column_width - 1;
1327 if (cols >=
descr->column_width) cols /=
descr->column_width;
1359 TRACE(
"old focus %d, index %d\n", oldfocus,
index);
1400 if (
descr->items[
i].selected)
continue;
1409 if (!
descr->items[
i].selected)
continue;
1423 TRACE(
"cur_sel=%d index=%d notify=%s\n",
1443 if (oldsel != -1)
descr->items[oldsel].selected =
FALSE;
1484 if (
descr->anchor_item != -1)
1519 if (!
descr->items) max_items = 0;
1521 if (
descr->nb_items == max_items)
1564 item->height = mis.itemHeight ? mis.itemHeight : 1;
1565 TRACE(
"[%p]: measure item %d (%s) = %d\n",
1576 if (
descr->nb_items == 1)
1581 descr->selected_item++;
1588 descr->selected_item++;
1589 descr->focus_item = oldfocus;
1623 TRACE(
"[%p]: added item %d %s\n",
1640 if (!
descr->nb_items)
1715 descr->selected_item = -1;
1718 descr->selected_item--;
1727 if (
descr->focus_item < 0)
descr->focus_item = 0;
1742 descr->nb_items = 0;
1743 descr->top_item = 0;
1744 descr->selected_item = -1;
1745 descr->focus_item = 0;
1746 descr->anchor_item = -1;
1810 static const WCHAR bracketW[] = {
']',0 };
1815 if (!long_names &&
entry.cAlternateFileName[0])
1823 #define ATTRIBS (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | \ 1824 FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE) 1830 if (!long_names &&
entry.cAlternateFileName[0])
1839 if (
ret <= maxinsert) maxinsert++;
else maxinsert =
ret;
1960 else if (
descr->horz_extent)
2001 UINT pulScrollLines = 3;
2006 if ((delta < 0 && descr->wheel_remain < 0) ||
2007 (delta > 0 &&
descr->wheel_remain > 0))
2008 descr->wheel_remain += delta;
2010 descr->wheel_remain = delta;
2012 if (
descr->wheel_remain && pulScrollLines)
2015 pulScrollLines =
min((
UINT)
descr->page_size, pulScrollLines);
2030 TRACE(
"[%p]: lbuttondown %d,%d item %d, focus item %d\n",
2033 if (!
descr->caret_on && (
descr->in_focus))
return 0;
2035 if (!
descr->in_focus)
2041 if (
index == -1)
return 0;
2133 RECT clientRect, screenRect;
2141 if(
PtInRect(&clientRect, mousePos))
2146 descr->lphc->droppedIndex =
descr->nb_items ?
descr->selected_item : -1;
2154 POINT screenMousePos;
2155 HWND hWndOldCapture;
2158 screenMousePos = mousePos;
2164 if(!
PtInRect(&screenRect, screenMousePos))
2179 if (
PtInRect( &clientRect, mousePos ))
2186 if (
PtInRect( &clientRect, mousePos ))
2192 if(nHitTestType != 0)
2195 MAKELONG(screenMousePos.
x, screenMousePos.
y));
2199 if(hWndOldCapture != 0)
2214 if (
descr->captured)
2287 if (!
descr->captured)
return;
2292 else if (
y >=
descr->item_height *
descr->page_size)
2300 else if (
x >=
descr->width)
2334 bForceSelection =
FALSE;
2341 if (caret == -2)
return 0;
2343 if (caret == -1)
switch(
key)
2348 bForceSelection =
FALSE;
2350 caret =
descr->focus_item -
descr->page_size;
2355 caret =
descr->focus_item - 1;
2356 if (caret < 0) caret = 0;
2361 bForceSelection =
FALSE;
2363 caret =
descr->focus_item +
descr->page_size;
2368 caret =
descr->focus_item + 1;
2369 if (caret >=
descr->nb_items) caret =
descr->nb_items - 1;
2380 if (caret < 0) caret = 0;
2390 if (caret >=
descr->nb_items) caret =
descr->nb_items - 1;
2396 caret =
descr->nb_items - 1;
2408 bForceSelection =
FALSE;
2410 if (bForceSelection)
2411 caret =
descr->focus_item;
2417 descr->anchor_item = caret;
2421 descr->selected_item = caret;
2454 if (caret == -2)
return 0;
2489 descr->nb_items = 0;
2490 descr->top_item = 0;
2491 descr->selected_item = -1;
2492 descr->focus_item = 0;
2493 descr->anchor_item = -1;
2494 descr->item_height = 1;
2495 descr->page_size = 1;
2496 descr->column_width = 150;
2497 descr->horz_extent = 0;
2498 descr->horz_pos = 0;
2501 descr->wheel_remain = 0;
2502 descr->caret_on = !lphc;
2542 descr->item_height = mis.itemHeight ? mis.itemHeight : 1;
2623 return descr->nb_items;
2649 return descr->nb_items;
2664 if (
descr->nb_items == 0)
2667 return descr->selected_item;
2668 if (
descr->selected_item != -1)
2669 return descr->selected_item;
2670 return descr->focus_item;
2674 return descr->top_item;
2693 if(
descr->nb_items == 0)
2730 return descr->focus_item;
2800 return descr->horz_extent;
2806 return descr->anchor_item;
2821 return descr->locale;
2843 if (
descr->caret_on)
2846 if ((
descr->focus_item != -1) && (
descr->in_focus))
2851 if (!
descr->caret_on)
2854 if ((
descr->focus_item != -1) && (
descr->in_focus))
2859 return descr->page_size;
2901 if (
descr->focus_item != -1)
2908 descr->wheel_remain = 0;
2909 if ((
descr->focus_item != -1) &&
descr->caret_on)
2956 descr->captured = captured;
3027 if( lphc )
return 0;
3039 case WM_THEMECHANGED:
3047 WARN(
"[%p]: unknown msg %04x wp %08lx lp %08lx\n",
3058 memset(&wndClass, 0,
sizeof(wndClass));
3071 static const WCHAR combolboxW[] = {
'C',
'o',
'm',
'b',
'o',
'L',
'B',
'o',
'x',0};
3074 memset(&wndClass, 0,
sizeof(wndClass));
3086 void LISTBOX_Unregister(
void)
3091 void COMBOLBOX_Unregister(
void)
3093 static const WCHAR combolboxW[] = {
'C',
'o',
'm',
'b',
'o',
'L',
'B',
'o',
'x',0};
int WINAPI CombineRgn(_In_opt_ HRGN hrgnDest, _In_opt_ HRGN hrgnSrc1, _In_opt_ HRGN hrgnSrc2, _In_ int fnCombineMode)
static DWORD(WINAPI *pGetListBoxInfo)(HWND)
#define ERROR_INVALID_PARAMETER
BOOL WINAPI ExtTextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_ UINT options, _In_opt_ const RECT *lprect, _In_reads_opt_(c) LPCWSTR lpString, _In_ UINT c, _In_reads_opt_(c) const INT *lpDx)
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
#define CHECK_DRIVE(item)
GLint GLint GLsizei width
HDC WINAPI GetDCEx(_In_opt_ HWND, _In_opt_ HRGN, _In_ DWORD)
static LRESULT LISTBOX_HandleMouseWheel(LB_DESCR *descr, SHORT delta)
static void LISTBOX_MakeItemVisible(LB_DESCR *descr, INT index, BOOL fully)
#define LB_FINDSTRINGEXACT
static const WCHAR combolboxW[]
#define CSTR_GREATER_THAN
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
void LISTBOX_Register(void)
int WINAPI SelectClipRgn(_In_ HDC, _In_opt_ HRGN)
#define LB_SETCOLUMNWIDTH
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define LB_SETHORIZONTALEXTENT
static LRESULT LISTBOX_GetItemRect(const LB_DESCR *descr, INT index, RECT *rect)
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define LB_GETHORIZONTALEXTENT
#define ERROR_SETCOUNT_ON_BAD_LB
BOOL WINAPI GetTextExtentPointA(_In_ HDC hdc, _In_reads_(c) LPCSTR lpString, _In_ int c, _Out_ LPSIZE lpsz)
GLdouble GLdouble GLdouble r
static LRESULT LISTBOX_Paint(LB_DESCR *descr, HDC hdc)
#define IS_MULTISELECT(descr)
#define LBS_WANTKEYBOARDINPUT
static LRESULT LISTBOX_GetSelItems(const LB_DESCR *descr, INT max, LPINT array)
GLuint GLuint GLsizei count
static LRESULT CALLBACK LISTBOX_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
static void LISTBOX_UpdatePage(LB_DESCR *descr)
LPWSTR WINAPI CharLowerW(_Inout_ LPWSTR)
BOOL WINAPI DrawFocusRect(_In_ HDC, _In_ LPCRECT)
static BOOL LISTBOX_SetTabStops(LB_DESCR *descr, INT count, LPINT tabs)
BOOL WINAPI ShowScrollBar(_In_ HWND, _In_ int, _In_ BOOL)
static LRESULT LISTBOX_SetItemHeight(LB_DESCR *descr, INT index, INT height, BOOL repaint)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
#define INVALID_HANDLE_VALUE
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
DWORD WINAPI GetLastError(VOID)
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
static INT LISTBOX_lstrcmpiW(LCID lcid, LPCWSTR str1, LPCWSTR str2)
GLint GLint GLint GLint GLint x
static void LISTBOX_DrawFocusRect(LB_DESCR *descr, BOOL on)
HWND WINAPI SetFocus(_In_opt_ HWND)
static LRESULT LISTBOX_SetCaretIndex(LB_DESCR *descr, INT index, BOOL fully_visible)
LCID WINAPI GetUserDefaultLCID(void)
#define GetWindowLongPtrW
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
#define strncmpiW(s1, s2, n)
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
#define WM_CTLCOLORLISTBOX
static BOOL LISTBOX_Destroy(LB_DESCR *descr)
static LRESULT LISTBOX_HandleLButtonDownCombo(LB_DESCR *descr, UINT msg, DWORD keys, INT x, INT y)
static LRESULT LISTBOX_GetSelCount(const LB_DESCR *descr)
HRESULT WINAPI DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect)
SIZE_T WINAPI HeapSize(HANDLE, DWORD, LPCVOID)
static void LISTBOX_UpdateSize(LB_DESCR *descr)
static LRESULT LISTBOX_HandleTimer(LB_DESCR *descr, INT index, TIMER_DIRECTION dir)
DWORD WINAPI GetSysColor(_In_ int)
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define LB_GETANCHORINDEX
#define RtlMoveMemory(Destination, Source, Length)
WINE_DEFAULT_DEBUG_CHANNEL(listbox2)
#define LBS_OWNERDRAWFIXED
#define LB_SCROLL_TIMEOUT
static LRESULT LISTBOX_HandleHScroll(LB_DESCR *descr, WORD scrollReq, WORD pos)
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
#define SEND_NOTIFICATION(descr, code)
BOOL WINAPI IsThemeBackgroundPartiallyTransparent(HTHEME hTheme, int iPartId, int iStateId)
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
static void LISTBOX_DeleteItem(LB_DESCR *descr, INT index)
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
static LRESULT LISTBOX_SetCount(LB_DESCR *descr, INT count)
#define LBS_NOINTEGRALHEIGHT
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
static struct _test_info info[]
LONG WINAPI TabbedTextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_reads_(chCount) LPCWSTR lpString, _In_ int chCount, _In_ int nTabPositions, _In_reads_opt_(nTabPositions) CONST INT *lpnTabStopPositions, _In_ int nTabOrigin)
HWND WINAPI GetCapture(void)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
static LRESULT LISTBOX_SetHorizontalExtent(LB_DESCR *descr, INT extent)
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
static LRESULT LISTBOX_HandleVScroll(LB_DESCR *descr, WORD scrollReq, WORD pos)
static LRESULT LISTBOX_HandleSystemTimer(LB_DESCR *descr)
int WINAPI ScrollWindowEx(_In_ HWND, _In_ int, _In_ int, _In_opt_ LPCRECT, _In_opt_ LPCRECT, _In_opt_ HRGN, _Out_opt_ LPRECT, _In_ UINT)
BOOL WINAPI IsWindowEnabled(_In_ HWND)
static LRESULT LISTBOX_SetColumnWidth(LB_DESCR *descr, INT width)
#define COLOR_HIGHLIGHTTEXT
#define ERROR_FILE_NOT_FOUND
#define ERROR_NO_MORE_FILES
static LRESULT LISTBOX_GetItemHeight(const LB_DESCR *descr, INT index)
UINT_PTR WINAPI SetSystemTimer(HWND, UINT_PTR, UINT, TIMERPROC)
static void LISTBOX_NCPaint(LB_DESCR *descr, HRGN region)
#define FILE_ATTRIBUTE_DIRECTORY
SHORT WINAPI GetKeyState(_In_ int)
HRGN WINAPI CreateRectRgn(_In_ int, _In_ int, _In_ int, _In_ int)
static LRESULT LISTBOX_SetTopItem(LB_DESCR *descr, INT index, BOOL scroll)
INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
HRESULT WINAPI DrawThemeParentBackground(HWND hwnd, HDC hdc, RECT *prc)
static void LISTBOX_PaintItem(LB_DESCR *descr, HDC hdc, const RECT *rect, INT index, UINT action, BOOL ignoreFocus)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static LRESULT LISTBOX_RemoveItem(LB_DESCR *descr, INT index)
static LRESULT LISTBOX_HandleLButtonUp(LB_DESCR *descr)
#define IS_OWNERDRAW(descr)
const char * wine_dbgstr_rect(const RECT *rect)
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
int WINAPI GetSystemMetrics(_In_ int)
static INT LISTBOX_SetFont(LB_DESCR *descr, HFONT font)
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
static LRESULT LISTBOX_SetSelection(LB_DESCR *descr, INT index, BOOL on, BOOL send_notify)
static void LISTBOX_UpdateScroll(LB_DESCR *descr)
static LRESULT LISTBOX_HandleChar(LB_DESCR *descr, WCHAR charW)
HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR classlist)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
static INT LISTBOX_GetItemFromPoint(const LB_DESCR *descr, INT x, INT y)
static LRESULT LISTBOX_InitStorage(LB_DESCR *descr, INT nb_items)
HTHEME WINAPI GetWindowTheme(HWND hwnd)
BOOL WINAPI GetScrollInfo(_In_ HWND, _In_ int, _Inout_ LPSCROLLINFO)
BOOL WINAPI IsValidLocale(LCID lcid, DWORD flags)
static void LISTBOX_InvalidateItems(LB_DESCR *descr, INT index)
static INT LISTBOX_GetCurrentPageSize(const LB_DESCR *descr)
static void LISTBOX_SetRedraw(LB_DESCR *descr, BOOL on)
#define memcpy(s1, s2, n)
BOOL WINAPI SetRectEmpty(_Out_ LPRECT)
static LRESULT LISTBOX_GetText(LB_DESCR *descr, INT index, LPWSTR buffer, BOOL unicode)
static LRESULT LISTBOX_InsertString(LB_DESCR *descr, INT index, LPCWSTR str)
static const WCHAR textW[]
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
#define LB_ARRAY_GRANULARITY
static LRESULT LISTBOX_Directory(LB_DESCR *descr, UINT attrib, LPCWSTR filespec, BOOL long_names)
GLint GLint GLsizei GLsizei height
#define DRIVE_NO_ROOT_DIR
BOOL WINAPI KillSystemTimer(HWND, UINT_PTR)
static void LISTBOX_MoveCaret(LB_DESCR *descr, INT index, BOOL fully_visible)
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
HWND WINAPI GetParent(_In_ HWND)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
HWND WINAPI SetCapture(_In_ HWND hWnd)
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
#define LBS_DISPLAYCHANGED
BOOL COMBO_FlipListbox(LPHEADCOMBO lphc, BOOL ok, BOOL bRedrawButton)
static LRESULT LISTBOX_HandleKeyDown(LB_DESCR *descr, DWORD key)
static INT LISTBOX_FindFileStrPos(LB_DESCR *descr, LPCWSTR str)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static INT LISTBOX_FindStringPos(LB_DESCR *descr, LPCWSTR str, BOOL exact)
static float(__cdecl *square_half_float)(float x
int WINAPI ExcludeClipRect(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
#define LBS_DISABLENOSCROLL
#define ERROR_LB_WITHOUT_TABSTOPS
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
WINE_UNICODE_INLINE WCHAR * strcatW(WCHAR *dst, const WCHAR *src)
HDC WINAPI GetWindowDC(_In_opt_ HWND)
static INT LISTBOX_GetMaxTopIndex(const LB_DESCR *descr)
#define SW_SCROLLCHILDREN
GLint GLint GLint GLint GLint GLint y
static void LISTBOX_ResetContent(LB_DESCR *descr)
#define LBS_OWNERDRAWVARIABLE
static LRESULT LISTBOX_HandleLButtonDown(LB_DESCR *descr, DWORD keys, INT x, INT y)
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define LB_GETLISTBOXINFO
#define ERROR_INVALID_INDEX
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
#define SIF_DISABLENOSCROLL
static void LISTBOX_InvalidateItemRect(LB_DESCR *descr, INT index)
static LRESULT LISTBOX_InsertItem(LB_DESCR *descr, INT index, LPWSTR str, ULONG_PTR data)
BOOL WINAPI ReleaseCapture(void)
static TIMER_DIRECTION LISTBOX_Timer
WINE_UNICODE_INLINE int strcmpW(const WCHAR *str1, const WCHAR *str2)
static void LISTBOX_HandleMouseMove(LB_DESCR *descr, INT x, INT y)
static void LISTBOX_SetHorizontalPos(LB_DESCR *descr, INT pos)
BOOL WINAPI SetWindowOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
BOOL WINAPI IsWindowVisible(_In_ HWND)
#define LB_SELITEMRANGEEX
static BOOL LISTBOX_Create(HWND hwnd, LPHEADCOMBO lphc)