43#define LB_ARRAY_GRANULARITY 16
46#define LB_SCROLL_TIMEOUT 50
52#define LBS_DISPLAYCHANGED 0x80000000
100#define IS_OWNERDRAW(descr) \
101 ((descr)->style & (LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE))
103#define HAS_STRINGS(descr) \
104 (!IS_OWNERDRAW(descr) || ((descr)->style & LBS_HASSTRINGS))
107#define IS_MULTISELECT(descr) \
108 ((descr)->style & (LBS_MULTIPLESEL|LBS_EXTENDEDSEL) && \
109 !((descr)->style & LBS_NOSEL))
111#define SEND_NOTIFICATION(descr,code) \
112 (SendMessageW( (descr)->owner, WM_COMMAND, \
113 MAKEWPARAM( GetWindowLongPtrW((descr->self),GWLP_ID), (code)), (LPARAM)(descr->self) ))
115#define ISWIN31 (LOWORD(GetVersion()) == 0x0a03)
150 if (items_size >
descr->items_size ||
164 descr->items_size = items_size;
231 if (!
descr->u.items)
return;
233 if (index < descr->nb_items)
242 if (!
descr->u.items)
return;
244 if (index < descr->nb_items)
257 for (
i =
descr->top_item,
height = 0; i < descr->nb_items;
i++)
261 if (
i ==
descr->top_item)
return 1;
262 else return i -
descr->top_item;
280 if (max < descr->nb_items - 1)
max++;
390 TRACE(
"setting top item %d, scroll %d\n",
index, scroll);
468 if(
descr->item_height != 0)
469 remaining =
descr->height %
descr->item_height;
472 if ((
descr->height >
descr->item_height) && remaining)
474 TRACE(
"[%p]: changing height %d -> %d\n",
525 if (index < descr->top_item)
562 if (!
descr->nb_items)
return -1;
568 while (index < descr->nb_items)
585 if (
y >=
descr->item_height *
descr->page_size)
return -1;
594 if (
index < 0)
return 0;
611 if (index < descr->nb_items)
630 ERR(
"called with an out of bounds index %d(%d) in owner draw, Not good.\n",
index,
descr->nb_items);
655 TRACE(
"[%p]: drawitem %d (%s) action=%02x state=%02x rect=%s\n",
677 TRACE(
"[%p]: painting %d (%s) action=%02x rect=%s\n",
717 descr->style &= ~LBS_NOREDRAW;
726 descr->style &= ~LBS_DISPLAYCHANGED;
744 HBRUSH
hbrush, oldBrush = 0;
781 if (
descr->focus_item == -1)
return;
782 if (!
descr->caret_on || !
descr->in_focus)
return;
801 UINT new_size =
descr->nb_items + nb_items;
805 return descr->items_size;
834 for (
i = 0;
i <
descr->nb_tabs;
i++)
870 WARN(
"got an invalid buffer (Delphi bug?)\n" );
936 return exact ? -1 :
min;
960 if (*
str !=
'[')
res = -1;
961 else if (
p[1] ==
'-')
968 if (
str[1] ==
'-')
res = 1;
1022 if (item_str[0] ==
'[')
1084 RECT focusRect = {-1, -1, -1, -1};
1086 HBRUSH
hbrush, oldBrush = 0;
1093 else if (
descr->horz_pos)
1105 if (!
descr->nb_items && (
descr->focus_item != -1) &&
descr->caret_on &&
1119 for (
i =
descr->top_item; i < descr->nb_items;
i++)
1127 if (
i ==
descr->focus_item)
1150 col_pos =
descr->page_size - 1;
1161 if (focusRect.
top != focusRect.
bottom &&
1193 HRGN cliprgn = region;
1208 r.right - cxEdge,
r.bottom - cyEdge);
1209 if (region != (HRGN)1)
1284 else return descr->item_height;
1334 if (!(diff =
descr->horz_pos -
pos))
return;
1385 TRACE(
"[%p]: new column width = %d\n",
descr->self, column_width);
1390 descr->column_width = column_width;
1407 const char *alphabet =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
1414 ERR(
"unable to get DC.\n" );
1422 descr->avg_char_width = (sz.
cx / 26 + 1) / 2;
1438 TRACE(
"current top item %d, index %d, fully %d\n",
descr->top_item,
index, fully);
1440 if (index <= descr->top_item)
top =
index;
1444 if (!fully) cols +=
descr->column_width - 1;
1445 if (cols >=
descr->column_width) cols /=
descr->column_width;
1447 if (index < descr->top_item + (
descr->page_size * cols))
return;
1458 if (index < descr->top_item +
descr->page_size)
return;
1545 TRACE(
"cur_sel=%d index=%d notify=%s\n",
1606 if (
descr->anchor_item != -1)
1662 TRACE(
"[%p]: measure item %d (%s) = %d\n",
1673 if (
descr->nb_items == 1)
1678 descr->selected_item++;
1683 if (index <= descr->selected_item)
1685 descr->selected_item++;
1686 descr->focus_item = oldfocus;
1720 TRACE(
"[%p]: added item %d %s\n",
1766 if (
descr->nb_items == 1)
1790 descr->selected_item = -1;
1791 else if (index < descr->selected_item)
1793 descr->selected_item--;
1802 if (
descr->focus_item < 0)
descr->focus_item = 0;
1818 descr->nb_items = 0;
1819 descr->top_item = 0;
1820 descr->selected_item = -1;
1821 descr->focus_item = 0;
1822 descr->anchor_item = -1;
1823 descr->items_size = 0;
1844 if (
count < orig_num)
1848 descr->selected_item = -1;
1894 static const WCHAR bracketW[] = {
']',0 };
1899 if (!long_names &&
entry.cAlternateFileName[0])
1907#define ATTRIBS (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | \
1908 FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE)
1914 if (!long_names &&
entry.cAlternateFileName[0])
1923 if (
ret <= maxinsert) maxinsert++;
else maxinsert =
ret;
2044 else if (
descr->horz_extent)
2085 INT pulScrollLines = 3;
2090 if ((delta < 0 && descr->wheel_remain < 0) ||
2091 (delta > 0 &&
descr->wheel_remain > 0))
2092 descr->wheel_remain += delta;
2094 descr->wheel_remain = delta;
2096 if (
descr->wheel_remain && pulScrollLines)
2101 pulScrollLines =
min(
descr->width /
descr->column_width, pulScrollLines);
2102 pulScrollLines =
max(1, pulScrollLines);
2105 cLineScroll *=
descr->page_size;
2109 pulScrollLines =
min(
descr->page_size, pulScrollLines);
2125 TRACE(
"[%p]: lbuttondown %d,%d item %d, focus item %d\n",
2128 if (!
descr->caret_on && (
descr->in_focus))
return 0;
2130 if (!
descr->in_focus)
2136 if (
index == -1)
return 0;
2228 RECT clientRect, screenRect;
2236 if(
PtInRect(&clientRect, mousePos))
2241 descr->lphc->droppedIndex =
descr->nb_items ?
descr->selected_item : -1;
2249 POINT screenMousePos;
2250 HWND hWndOldCapture;
2253 screenMousePos = mousePos;
2259 if(!
PtInRect(&screenRect, screenMousePos))
2274 if (
PtInRect( &clientRect, mousePos ))
2281 if (
PtInRect( &clientRect, mousePos ))
2287 if(nHitTestType != 0)
2290 MAKELONG(screenMousePos.
x, screenMousePos.
y));
2294 if(hWndOldCapture != 0)
2309 if (
descr->captured)
2382 if (!
descr->captured)
return;
2387 else if (
y >=
descr->item_height *
descr->page_size)
2395 else if (
x >=
descr->width)
2429 bForceSelection =
FALSE;
2436 if (caret == -2)
return 0;
2438 if (caret == -1)
switch(
key)
2443 bForceSelection =
FALSE;
2445 caret =
descr->focus_item -
descr->page_size;
2450 caret =
descr->focus_item - 1;
2451 if (caret < 0) caret = 0;
2456 bForceSelection =
FALSE;
2462 caret =
descr->focus_item + 1;
2463 if (caret >=
descr->nb_items) caret =
descr->nb_items - 1;
2474 if (caret < 0) caret = 0;
2484 if (caret >=
descr->nb_items) caret =
descr->nb_items - 1;
2490 caret =
descr->nb_items - 1;
2502 bForceSelection =
FALSE;
2504 if (bForceSelection)
2505 caret =
descr->focus_item;
2511 descr->anchor_item = caret;
2515 descr->selected_item = caret;
2548 if (caret == -2)
return 0;
2583 descr->items_size = 0;
2584 descr->nb_items = 0;
2585 descr->top_item = 0;
2586 descr->selected_item = -1;
2587 descr->focus_item = 0;
2588 descr->anchor_item = -1;
2589 descr->item_height = 1;
2590 descr->page_size = 1;
2591 descr->column_width = 150;
2592 descr->horz_extent = 0;
2593 descr->horz_pos = 0;
2596 descr->wheel_remain = 0;
2597 descr->caret_on = !lphc;
2619 descr->style &= ~LBS_NODATA;
2624 descr->style &= ~LBS_OWNERDRAWVARIABLE;
2641 descr->item_height = mis.itemHeight ? mis.itemHeight : 1;
2722 return descr->nb_items;
2748 return descr->nb_items;
2763 if (
descr->nb_items == 0)
2766 return descr->selected_item;
2767 if (
descr->selected_item != -1)
2768 return descr->selected_item;
2769 return descr->focus_item;
2773 return descr->top_item;
2792 if(
descr->nb_items == 0)
2829 return descr->focus_item;
2906 return descr->horz_extent;
2912 return descr->anchor_item;
2927 return descr->locale;
2949 if (
descr->caret_on)
2952 if ((
descr->focus_item != -1) && (
descr->in_focus))
2957 if (!
descr->caret_on)
2960 if ((
descr->focus_item != -1) && (
descr->in_focus))
2965 return descr->page_size;
3007 if (
descr->focus_item != -1)
3014 descr->wheel_remain = 0;
3015 if ((
descr->focus_item != -1) &&
descr->caret_on)
3062 descr->captured = captured;
3133 if( lphc )
return 0;
3145 case WM_THEMECHANGED:
3153 WARN(
"[%p]: unknown msg %04x wp %08lx lp %08lx\n",
3164 memset(&wndClass, 0,
sizeof(wndClass));
3177 static const WCHAR combolboxW[] = {
'C',
'o',
'm',
'b',
'o',
'L',
'B',
'o',
'x',0};
3180 memset(&wndClass, 0,
sizeof(wndClass));
3192void LISTBOX_Unregister(
void)
3197void COMBOLBOX_Unregister(
void)
3199 static const WCHAR combolboxW[] = {
'C',
'o',
'm',
'b',
'o',
'L',
'B',
'o',
'x',0};
static void * heap_realloc(void *mem, size_t len)
static const char * wine_dbgstr_rect(const RECT *prc)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static char selected[MAX_PATH+1]
BOOL COMBO_FlipListbox(LPHEADCOMBO lphc, BOOL ok, BOOL bRedrawButton)
static LRESULT LISTBOX_RemoveItem(LB_DESCR *descr, INT index)
#define SEND_NOTIFICATION(descr, code)
static LRESULT LISTBOX_InsertString(LB_DESCR *descr, INT index, LPCWSTR str)
static void LISTBOX_DrawFocusRect(LB_DESCR *descr, BOOL on)
static void LISTBOX_SetHorizontalPos(LB_DESCR *descr, INT pos)
static LRESULT LISTBOX_HandleKeyDown(LB_DESCR *descr, DWORD key)
static LRESULT LISTBOX_SetCaretIndex(LB_DESCR *descr, INT index, BOOL fully_visible)
static BOOL LISTBOX_SetTabStops(LB_DESCR *descr, INT count, LPINT tabs)
static LRESULT LISTBOX_HandleLButtonUp(LB_DESCR *descr)
static void remove_item_data(LB_DESCR *descr, UINT index)
static void LISTBOX_DeleteItem(LB_DESCR *descr, INT index)
static void LISTBOX_InvalidateItems(LB_DESCR *descr, INT index)
static LRESULT LISTBOX_GetSelCount(const LB_DESCR *descr)
static void LISTBOX_SetRedraw(LB_DESCR *descr, BOOL on)
static void LISTBOX_InvalidateItemRect(LB_DESCR *descr, INT index)
static LRESULT LISTBOX_GetText(LB_DESCR *descr, INT index, LPWSTR buffer, BOOL unicode)
static LRESULT LISTBOX_InitStorage(LB_DESCR *descr, INT nb_items)
static void LISTBOX_MakeItemVisible(LB_DESCR *descr, INT index, BOOL fully)
static INT LISTBOX_FindFileStrPos(LB_DESCR *descr, LPCWSTR str)
static LRESULT LISTBOX_SetSelection(LB_DESCR *descr, INT index, BOOL on, BOOL send_notify)
static LRESULT LISTBOX_HandleLButtonDownCombo(LB_DESCR *descr, UINT msg, DWORD keys, INT x, INT y)
static LRESULT LISTBOX_HandleVScroll(LB_DESCR *descr, WORD scrollReq, WORD pos)
#define IS_MULTISELECT(descr)
static void LISTBOX_ResetContent(LB_DESCR *descr)
static LRESULT LISTBOX_HandleTimer(LB_DESCR *descr, INT index, TIMER_DIRECTION dir)
#define HAS_STRINGS(descr)
static LRESULT LISTBOX_HandleMouseWheel(LB_DESCR *descr, SHORT delta)
static UINT get_item_height(const LB_DESCR *descr, UINT index)
static LRESULT LISTBOX_SetHorizontalExtent(LB_DESCR *descr, INT extent)
static void set_item_height(LB_DESCR *descr, UINT index, UINT height)
static void set_item_selected_state(LB_DESCR *descr, UINT index, BOOL state)
static LRESULT LISTBOX_InsertItem(LB_DESCR *descr, INT index, LPWSTR str, ULONG_PTR data)
static void LISTBOX_MoveCaret(LB_DESCR *descr, INT index, BOOL fully_visible)
static LRESULT LISTBOX_GetSelItems(const LB_DESCR *descr, INT max, LPINT array)
static BOOL is_item_selected(const LB_DESCR *descr, UINT index)
static LRESULT LISTBOX_Paint(LB_DESCR *descr, HDC hdc)
static void LISTBOX_UpdateScroll(LB_DESCR *descr)
static TIMER_DIRECTION LISTBOX_Timer
static LRESULT LISTBOX_SetTopItem(LB_DESCR *descr, INT index, BOOL scroll)
static INT LISTBOX_SetFont(LB_DESCR *descr, HFONT font)
static LRESULT LISTBOX_SetColumnWidth(LB_DESCR *descr, INT column_width)
static LRESULT LISTBOX_HandleHScroll(LB_DESCR *descr, WORD scrollReq, WORD pos)
static ULONG_PTR get_item_data(const LB_DESCR *descr, UINT index)
static LRESULT LISTBOX_SelectItemRange(LB_DESCR *descr, INT first, INT last, BOOL on)
static void set_item_data(LB_DESCR *descr, UINT index, ULONG_PTR data)
void LISTBOX_Register(void)
static void LISTBOX_RepaintItem(LB_DESCR *descr, INT index, UINT action)
static LRESULT LISTBOX_GetItemRect(const LB_DESCR *descr, INT index, RECT *rect)
static void set_item_string(const LB_DESCR *descr, UINT index, WCHAR *string)
static INT LISTBOX_FindString(LB_DESCR *descr, INT start, LPCWSTR str, BOOL exact)
static void insert_item_data(LB_DESCR *descr, UINT index)
static BOOL LISTBOX_Destroy(LB_DESCR *descr)
#define LB_ARRAY_GRANULARITY
static void LISTBOX_NCPaint(LB_DESCR *descr, HRGN region)
void COMBOLBOX_Register(void)
static LRESULT LISTBOX_HandleSystemTimer(LB_DESCR *descr)
static BOOL resize_storage(LB_DESCR *descr, UINT items_size)
static LRESULT LISTBOX_Directory(LB_DESCR *descr, UINT attrib, LPCWSTR filespec, BOOL long_names)
static void LISTBOX_HandleMouseMove(LB_DESCR *descr, INT x, INT y)
static LRESULT LISTBOX_GetItemHeight(const LB_DESCR *descr, INT index)
#define LB_SCROLL_TIMEOUT
static INT LISTBOX_FindStringPos(LB_DESCR *descr, LPCWSTR str, BOOL exact)
static void LISTBOX_PaintItem(LB_DESCR *descr, HDC hdc, const RECT *rect, INT index, UINT action, BOOL ignoreFocus)
#define IS_OWNERDRAW(descr)
static INT LISTBOX_GetItemFromPoint(const LB_DESCR *descr, INT x, INT y)
static INT LISTBOX_lstrcmpiW(LCID lcid, LPCWSTR str1, LPCWSTR str2)
#define LBS_DISPLAYCHANGED
static size_t get_sizeof_item(const LB_DESCR *descr)
static LRESULT LISTBOX_HandleChar(LB_DESCR *descr, WCHAR charW)
static void LISTBOX_UpdatePage(LB_DESCR *descr)
static LRESULT LISTBOX_SetItemHeight(LB_DESCR *descr, INT index, INT height, BOOL repaint)
static void LISTBOX_UpdateSize(LB_DESCR *descr)
static WCHAR * get_item_string(const LB_DESCR *descr, UINT index)
static INT LISTBOX_GetCurrentPageSize(const LB_DESCR *descr)
static LRESULT LISTBOX_SetCount(LB_DESCR *descr, UINT count)
static INT LISTBOX_GetMaxTopIndex(const LB_DESCR *descr)
static LRESULT CALLBACK LISTBOX_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
static BOOL LISTBOX_Create(HWND hwnd, LPHEADCOMBO lphc)
static LRESULT LISTBOX_HandleLButtonDown(LB_DESCR *descr, DWORD keys, INT x, INT y)
#define ERROR_INVALID_PARAMETER
#define INVALID_HANDLE_VALUE
#define HeapFree(x, y, z)
#define __EXCEPT_PAGE_FAULT
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
BOOL WINAPI FindClose(HANDLE hFindFile)
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
BOOL WINAPI IsValidLocale(LCID lcid, DWORD flags)
LCID WINAPI GetUserDefaultLCID(void)
HRESULT WINAPI DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect)
BOOL WINAPI IsThemeBackgroundPartiallyTransparent(HTHEME hTheme, int iPartId, int iStateId)
HRESULT WINAPI DrawThemeParentBackground(HWND hwnd, HDC hdc, RECT *prc)
HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR classlist)
HTHEME WINAPI GetWindowTheme(HWND hwnd)
HRESULT WINAPI CloseThemeData(HTHEME hTheme)
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLint GLint GLsizei GLsizei height
GLdouble GLdouble GLdouble r
GLdouble GLdouble GLdouble GLdouble top
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
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 * u
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
static const WCHAR textW[]
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static const WCHAR dotW[]
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)