36#include "wine/unicode.h"
98#define DIVIDER_WIDTH 10
99#define HOT_DIVIDER_WIDTH 2
100#define MAX_HEADER_TEXT_LEN 260
101#define HDN_UNICODE_OFFSET 20
102#define HDN_FIRST_UNICODE (HDN_FIRST-HDN_UNICODE_OFFSET)
104#define HDI_SUPPORTED_FIELDS (HDI_WIDTH|HDI_TEXT|HDI_FORMAT|HDI_LPARAM|HDI_BITMAP|HDI_IMAGE|HDI_ORDER)
105#define HDI_UNSUPPORTED_FIELDS (HDI_FILTER)
106#define HDI_UNKNOWN_FIELDS (~(HDI_SUPPORTED_FIELDS|HDI_UNSUPPORTED_FIELDS|HDI_DI_SETITEM))
107#define HDI_COMCTL32_4_0_FIELDS (HDI_WIDTH|HDI_TEXT|HDI_FORMAT|HDI_LPARAM|HDI_BITMAP)
150 static const WCHAR emptyString[] = {0};
178 if ((iorder <0) || iorder >= infoPtr->
uNumItem)
180 return infoPtr->
order[iorder];
189 TRACE(
"%d: %d->%d\n", iItem, lpItem->
iOrder, iNewOrder);
190 if (lpItem->
iOrder < iNewOrder)
194 (iNewOrder - lpItem->
iOrder) *
sizeof(
INT));
196 if (iNewOrder < lpItem->iOrder)
199 &infoPtr->
order[iNewOrder],
200 (lpItem->
iOrder - iNewOrder) *
sizeof(
INT));
202 infoPtr->
order[iNewOrder] = iItem;
205 for (
i = nMin;
i <= nMax;
i++)
227 return (infoPtr->
dwStyle & HDS_NOSIZING) || (infoPtr->
items[iItem].
fmt & HDF_FIXEDWIDTH);
270 if (iDivider < infoPtr->uNumItem)
272 lpItem = &infoPtr->
items[iDivider];
345 data->rdh.dwSize =
sizeof(
data->rdh);
347 data->rdh.nCount = 0;
358 for (
i = 0;
i <
h;
i++,
y += yinc)
364 rect->bottom =
y + 1;
385 if (
r.right -
r.left == 0)
459 INT sort_w, sort_x, sort_h;
463 cw = iw =
bw = sort_w = sort_h = 0;
464 rw =
r.right -
r.left;
465 rh =
r.bottom -
r.top;
484 sort_w = 2 * sort_h - 1 + infoPtr->
iMargin * 2;
488 iw = img_cx + 2 * infoPtr->
iMargin;
509 cx =
r.left +
rw / 2 - cw / 2;
516 if (
cx + cw >
r.right)
521 tw = cw - infoPtr->
iMargin * 2;
549 if (sort_w || iw ||
bw) {
566 BitBlt (hClipDC, bx,
r.top + (rh -
bmp.bmHeight) / 2,
573 ix,
r.top + (rh - img_cy) / 2,
718 for (iCount = 0; iCount < infoPtr->
uNumItem; iCount++) {
729 TRACE(
"ON HEADER %d\n", iCount);
740 TRACE(
"ON HEADER %d\n", *pItem);
746 TRACE(
"ON DIVOPEN %d\n", *pItem);
752 TRACE(
"ON DIVIDER %d\n", *pItem);
763 TRACE(
"ON DIVIDER %d\n", *pItem);
769 TRACE(
"ON HEADER %d\n", iCount);
784 TRACE(
"ON DIVOPEN %d\n", *pItem);
790 TRACE(
"ON DIVIDER %d\n", *pItem);
803 if (lpPt->
x <
rect.left) {
807 else if (lpPt->
x >
rect.right) {
812 if (lpPt->
y <
rect.top) {
816 else if (lpPt->
y >
rect.bottom) {
823 TRACE(
"flags=0x%X\n", *pFlags);
863 *ppvScratch =
dest->pszText;
870 *ppvScratch =
dest->pszText;
925 nmhdr.
pitem = lpItem;
955 ERR(
"invalid mask value 0x%x\n", iValue);
982 void *pvBuffer =
NULL;
988 ERR(
"(): function called without a call to FreeCallbackItems\n");
1010 dispInfo.
iItem = iItem;
1017 TRACE(
"SendMessage returns(mask:0x%x,str:%s,lParam:%p)\n",
1020 (
void*) dispInfo.
lParam);
1090 lpItem = &infoPtr->
items[iItem];
1150 if (iDivider<-1 || iDivider>(
int)infoPtr->
uNumItem)
1176 TRACE(
"[iItem=%d]\n", iItem);
1178 if ((iItem < 0) || (iItem >= (
INT)infoPtr->
uNumItem))
1198 if (infoPtr->
order[
i] > iItem)
1229 TRACE(
"[nItem=%d]\n", nItem);
1235 if ((nItem < 0) || (nItem >= (
INT)infoPtr->
uNumItem))
1240 TRACE(
"mask %x contains unknown fields. Using only comctl32 4.0 fields\n",
mask);
1244 lpItem = &infoPtr->
items[nItem];
1288 if ((iItem < 0) || (iItem >= (
INT)infoPtr->
uNumItem))
1303 if ((
UINT)size <infoPtr->uNumItem)
1315 for(
i = 0;
i < to;
i++)
1395 if (phti->
flags & outside)
1396 return phti->
iItem = -1;
1410 if ((phdi ==
NULL) || (nItem < 0) || (phdi->
mask == 0))
1419 else if (infoPtr->
uNumItem < iOrder)
1433 infoPtr->
order[iOrder] = nItem;
1436 if (
i != iOrder && infoPtr->
order[
i] >= nItem)
1441 lpItem = &infoPtr->
items[nItem];
1452 lpItem->
fmt &= ~HDF_STRING;
1457 lpItem->
fmt &= ~HDF_BITMAP;
1485 TRACE(
"Layout x=%d y=%d cx=%d cy=%d\n",
1501 himlOld = infoPtr->
himl;
1535 if ((nItem < 0) || (nItem >= (
INT)infoPtr->
uNumItem))
1538 TRACE(
"[nItem=%d]\n", nItem);
1547 lpItem = &infoPtr->
items[nItem];
1583 infoPtr = heap_alloc_zero (
sizeof(*infoPtr));
1635 if (infoPtr->
items) {
1636 lpItem = infoPtr->
items;
1637 for (nItem = 0; nItem < infoPtr->
uNumItem; nItem++, lpItem++)
1715 TRACE(
"Pressed item %d.\n", nItem);
1734 TRACE(
"Begin tracking item %d.\n", nItem);
1773 if (iNewOrder > lpItem->
iOrder)
1777 if (iNewOrder != -1 &&
1879 BOOL hotTrackEnabled =
1888 if (hotTrackEnabled) {
1903 if (hDragItem !=
NULL)
1906 TRACE(
"Starting item drag\n");
1949 if (nWidth < 0) nWidth = 0;
1954 rcScroll = rcClient;
1981 if (hotTrackEnabled) {
1989 tme.
cbSize =
sizeof( tme );
2100 TRACE(
"(styletype=%lx, styleOld=0x%08x, styleNew=0x%08x)\n",
2238 case WM_NOTIFYFORMAT:
2244 case WM_THEMECHANGED:
2263 case WM_STYLECHANGED:
2272 ERR(
"unknown msg %04x wp=%04lx lp=%08lx\n",
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
static void * heap_realloc(void *mem, size_t len)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
INT Str_GetPtrWtoA(LPCWSTR lpSrc, LPSTR lpDest, INT nMaxLen) DECLSPEC_HIDDEN
BOOL COMCTL32_IsReflectedMessage(UINT uMsg) DECLSPEC_HIDDEN
BOOL Str_SetPtrWtoA(LPSTR *lppDest, LPCWSTR lpSrc) DECLSPEC_HIDDEN
BOOL Str_SetPtrAtoW(LPWSTR *lppDest, LPCSTR lpSrc) DECLSPEC_HIDDEN
VOID COMCTL32_RefreshSysColors(void) DECLSPEC_HIDDEN
INT WINAPI Str_GetPtrW(LPCWSTR, LPWSTR, INT)
COMCTL32_SysColor comctl32_color
INT WINAPI ImageList_Add(HIMAGELIST himl, HBITMAP hbmImage, HBITMAP hbmMask)
VOID WINAPI ImageList_EndDrag(void)
BOOL WINAPI ImageList_DragMove(INT x, INT y)
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
BOOL WINAPI ImageList_DrawEx(HIMAGELIST himl, INT i, HDC hdc, INT x, INT y, INT dx, INT dy, COLORREF rgbBk, COLORREF rgbFg, UINT fStyle)
BOOL WINAPI ImageList_BeginDrag(HIMAGELIST himlTrack, INT iTrack, INT dxHotspot, INT dyHotspot)
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
BOOL WINAPI ImageList_DragShowNolock(BOOL bShow)
BOOL WINAPI ImageList_GetIconSize(HIMAGELIST himl, INT *cx, INT *cy)
BOOL WINAPI Str_SetPtrW(LPWSTR *lppDest, LPCWSTR lpSrc)
HRESULT WINAPI DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect)
HRESULT WINAPI DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, DWORD dwTextFlags2, const RECT *pRect)
HRESULT WINAPI GetThemeTextExtent(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, const RECT *pBoundingRect, RECT *pExtentRect)
HRESULT WINAPI GetThemeBackgroundContentRect(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pBoundingRect, RECT *pContentRect)
HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR classlist)
HTHEME WINAPI GetWindowTheme(HWND hwnd)
HRESULT WINAPI CloseThemeData(HTHEME hTheme)
static VOID NTAPI BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLint GLint GLsizei GLsizei height
GLdouble GLdouble GLdouble r
GLint GLint GLsizei width
GLuint GLdouble GLdouble GLint GLint order
GLubyte GLubyte GLubyte GLubyte w
GLfloat GLfloat GLfloat GLfloat h
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 const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
INT WINAPI DrawTextW(HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
#define NM_RELEASEDCAPTURE
#define HDM_SETORDERARRAY
#define LPSTR_TEXTCALLBACKW
#define HDM_GETBITMAPMARGIN
#define HDM_SETUNICODEFORMAT
#define HDM_GETUNICODEFORMAT
#define CDRF_NOTIFYITEMDRAW
#define CDRF_NOTIFYPOSTPAINT
#define HDF_BITMAP_ON_RIGHT
#define HDM_SETHOTDIVIDER
#define HDN_ITEMDBLCLICKW
#define HDN_ITEMCHANGINGW
#define HDM_GETORDERARRAY
#define HDM_SETBITMAPMARGIN
#define HDN_DIVIDERDBLCLICKW
#define HDM_SETFILTERCHANGETIMEOUT
#define HDM_CREATEDRAGIMAGE
static unsigned __int64 next
#define FIELD_OFFSET(t, f)
BOOL WINAPI GetTextMetricsW(_In_ HDC, _Out_ LPTEXTMETRICW)
HGDIOBJ WINAPI GetStockObject(_In_ int)
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
HRGN WINAPI CreateRectRgn(_In_ int, _In_ int, _In_ int, _In_ int)
BOOL WINAPI RectVisible(_In_ HDC, _In_ LPCRECT)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
BOOL WINAPI SetViewportOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
HRGN WINAPI ExtCreateRegion(_In_opt_ const XFORM *lpx, _In_ DWORD nCount, _In_reads_bytes_(nCount) const RGNDATA *lpData)
COLORREF WINAPI GetBkColor(_In_ HDC)
BOOL WINAPI PatBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
int WINAPI FillRgn(_In_ HDC, _In_ HRGN, _In_ HBRUSH)
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
int WINAPI SetBkMode(_In_ HDC, _In_ int)
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
BOOL WINAPI DeleteDC(_In_ HDC)
int WINAPI SelectClipRgn(_In_ HDC, _In_opt_ HRGN)
HWND WINAPI SetCapture(_In_ HWND hWnd)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define GetWindowLongPtrW
BOOL WINAPI ReleaseCapture(void)
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HBRUSH WINAPI GetSysColorBrush(_In_ int)
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
BOOL WINAPI TrackMouseEvent(_Inout_ LPTRACKMOUSEEVENT)
#define WM_SYSCOLORCHANGE
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI DrawEdge(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
BOOL WINAPI UpdateWindow(_In_ HWND)
HDC WINAPI GetDC(_In_opt_ HWND)
BOOL WINAPI SetRectEmpty(_Out_ LPRECT)
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define MAKEINTRESOURCEW(i)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define SetWindowLongPtrW
int WINAPI ScrollWindowEx(_In_ HWND, _In_ int, _In_ int, _In_opt_ LPCRECT, _In_opt_ LPCRECT, _In_opt_ HRGN, _Out_opt_ LPRECT, _In_ UINT)
int WINAPI GetSystemMetrics(_In_ int)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)