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);
1023 lpItem->
iImage = dispInfo.iImage;
1031 if (dispInfo.pszText != lpItem->
pszText)
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))
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];
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));
1586 infoPtr->hwndSelf =
hwnd;
1588 infoPtr->uNumItem = 0;
1592 infoPtr->bRectsValid =
FALSE;
1596 infoPtr->bPressed =
FALSE;
1597 infoPtr->bTracking =
FALSE;
1598 infoPtr->dwStyle = lpcs->
style;
1599 infoPtr->iMoveItem = 0;
1601 infoPtr->iHotItem = -1;
1602 infoPtr->iHotDivider = -1;
1604 infoPtr->nNotifyFormat =
1606 infoPtr->filter_change_timeout = 1000;
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",
HGDIOBJ WINAPI GetStockObject(_In_ int)
GLint GLint GLsizei width
COLORREF WINAPI GetBkColor(_In_ HDC)
#define WM_SYSCOLORCHANGE
BOOL Str_SetPtrWtoA(LPSTR *lppDest, LPCWSTR lpSrc) DECLSPEC_HIDDEN
GLuint GLdouble GLdouble GLint GLint order
#define memmove(s1, s2, n)
BOOL WINAPI SetViewportOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
int WINAPI FillRgn(_In_ HDC, _In_ HRGN, _In_ HBRUSH)
GLubyte GLubyte GLubyte GLubyte w
BOOL WINAPI GetTextMetricsW(_In_ HDC, _Out_ LPTEXTMETRICW)
int WINAPI SelectClipRgn(_In_ HDC, _In_opt_ HRGN)
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define HDM_SETBITMAPMARGIN
INT WINAPI ImageList_Add(HIMAGELIST himl, HBITMAP hbmImage, HBITMAP hbmMask)
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)
#define HDM_SETFILTERCHANGETIMEOUT
#define HDM_SETHOTDIVIDER
#define CDRF_NOTIFYPOSTPAINT
HDC WINAPI GetDC(_In_opt_ HWND)
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
GLdouble GLdouble GLdouble r
#define NM_RELEASEDCAPTURE
BOOL WINAPI ImageList_DragMove(INT x, INT y)
BOOL WINAPI UpdateWindow(_In_ HWND)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
HRESULT WINAPI GetThemeTextExtent(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, const RECT *pBoundingRect, RECT *pExtentRect)
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
GLint GLint GLint GLint GLint x
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
BOOL WINAPI Str_SetPtrW(LPWSTR *lppDest, LPCWSTR lpSrc)
#define GetWindowLongPtrW
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
VOID WINAPI ImageList_EndDrag(void)
HRESULT WINAPI DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect)
#define HDN_ITEMCHANGINGW
GLbitfield GLuint64 timeout
static void * heap_realloc(void *mem, size_t len)
static void * heap_alloc(size_t len)
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI TrackMouseEvent(_Inout_ LPTRACKMOUSEEVENT)
BOOL WINAPI ImageList_DragShowNolock(BOOL bShow)
GLfloat GLfloat GLfloat GLfloat h
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
BOOL WINAPI PatBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
INT Str_GetPtrWtoA(LPCWSTR lpSrc, LPSTR lpDest, INT nMaxLen) DECLSPEC_HIDDEN
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
int WINAPI SetBkMode(_In_ HDC, _In_ int)
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
BOOL WINAPI DrawEdge(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define HDM_CREATEDRAGIMAGE
int WINAPI ScrollWindowEx(_In_ HWND, _In_ int, _In_ int, _In_opt_ LPCRECT, _In_opt_ LPCRECT, _In_opt_ HRGN, _Out_opt_ LPRECT, _In_ UINT)
#define CDRF_NOTIFYITEMDRAW
#define HDN_ITEMDBLCLICKW
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
HRGN WINAPI CreateRectRgn(_In_ int, _In_ int, _In_ int, _In_ int)
#define HDM_SETORDERARRAY
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define LPSTR_TEXTCALLBACKW
int WINAPI GetSystemMetrics(_In_ int)
#define HDF_BITMAP_ON_RIGHT
#define HDM_GETORDERARRAY
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR classlist)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
COMCTL32_SysColor comctl32_color
HTHEME WINAPI GetWindowTheme(HWND hwnd)
BOOL WINAPI ImageList_BeginDrag(HIMAGELIST himlTrack, INT iTrack, INT dxHotspot, INT dyHotspot)
#define memcpy(s1, s2, n)
BOOL WINAPI SetRectEmpty(_Out_ LPRECT)
GLint GLint GLsizei GLsizei height
INT WINAPI Str_GetPtrW(LPCWSTR, LPWSTR, INT)
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
HRGN WINAPI ExtCreateRegion(_In_opt_ const XFORM *lpx, _In_ DWORD nCount, _In_reads_bytes_(nCount) const RGNDATA *lpData)
#define HDM_GETUNICODEFORMAT
HWND WINAPI SetCapture(_In_ HWND hWnd)
static unsigned __int64 next
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
BOOL Str_SetPtrAtoW(LPWSTR *lppDest, LPCSTR lpSrc) DECLSPEC_HIDDEN
BOOL WINAPI DeleteDC(_In_ HDC)
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
BOOL WINAPI RectVisible(_In_ HDC, _In_ LPCRECT)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define FIELD_OFFSET(t, f)
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
GLint GLint GLint GLint GLint GLint y
#define HDM_GETBITMAPMARGIN
#define HDN_DIVIDERDBLCLICKW
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
HRESULT WINAPI GetThemeBackgroundContentRect(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pBoundingRect, RECT *pContentRect)
BOOL WINAPI ReleaseCapture(void)
_Check_return_ _CRTIMP int __cdecl dup(_In_ int _FileHandle)
BOOL WINAPI ImageList_GetIconSize(HIMAGELIST himl, INT *cx, INT *cy)
BOOL COMCTL32_IsReflectedMessage(UINT uMsg) DECLSPEC_HIDDEN
#define SetWindowLongPtrW
#define MAKEINTRESOURCEW(i)
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
HBRUSH WINAPI GetSysColorBrush(_In_ int)
VOID COMCTL32_RefreshSysColors(void) DECLSPEC_HIDDEN
#define HDM_SETUNICODEFORMAT
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)
HRESULT WINAPI DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, DWORD dwTextFlags2, const RECT *pRect)
INT WINAPI DrawTextW(HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
BOOL WINAPI ImageList_DrawEx(HIMAGELIST himl, INT i, HDC hdc, INT x, INT y, INT dx, INT dy, COLORREF rgbBk, COLORREF rgbFg, UINT fStyle)
static BOOL heap_free(void *mem)