89 #define EXTRA_ITEM_SIZE(infoPtr) (max((infoPtr)->cbInfo, sizeof(LPARAM))) 90 #define TAB_ITEM_SIZE(infoPtr) FIELD_OFFSET(TAB_ITEM, extra[EXTRA_ITEM_SIZE(infoPtr)]) 132 #define SELECTED_TAB_OFFSET 2 133 #define ROUND_CORNER_SIZE 2 134 #define DISPLAY_AREA_PADDINGX 2 135 #define DISPLAY_AREA_PADDINGY 2 136 #define CONTROL_BORDER_SIZEX 2 137 #define CONTROL_BORDER_SIZEY 2 138 #define BUTTON_SPACINGX 3 139 #define BUTTON_SPACINGY 3 140 #define FLAT_BTN_SPACINGX 8 141 #define DEFAULT_MIN_TAB_WIDTH 54 142 #define DEFAULT_PADDING_X 6 143 #define EXTRA_ICON_PADDING 3 145 #define TAB_GetInfoPtr(hwnd) ((TAB_INFO *)GetWindowLongPtrW(hwnd,0)) 147 #define GET_DEFAULT_MIN_TAB_WIDTH(infoPtr) (DEFAULT_MIN_TAB_WIDTH - (DEFAULT_PADDING_X - (infoPtr)->uHItemPadding) * 2) 152 #define TAB_HOTTRACK_TIMER 1 153 #define TAB_HOTTRACK_TIMER_INTERVAL 100 159 assert(
i >= 0 && i < infoPtr->uNumItem);
206 TRACE(
"external tab %d, mask=0x%08x, dwState=0x%08x, dwStateMask=0x%08x, cchTextMax=0x%08x\n",
208 TRACE(
"external tab %d, iImage=%d, lParam=0x%08lx, pszTextW=%s\n",
219 TRACE(
"tab %d, dwState=0x%08x, pszText=%s, iImage=%d\n",
221 TRACE(
"tab %d, rect.left=%d, rect.top(row)=%d\n",
230 TRACE(
"(%p)\n", infoPtr);
239 TRACE(
"(%p)\n", infoPtr);
245 TRACE(
"(%p)\n", infoPtr);
253 TRACE(
"(%p %d)\n", infoPtr, iItem);
258 if (prevItem != iItem) {
283 TRACE(
"(%p %d)\n", infoPtr, iItem);
293 else if (iItem < infoPtr->uNumItem) {
296 if (infoPtr->
uFocus != iItem) {
314 if (infoPtr->
iSelected != iItem || oldFocus == -1 ) {
316 if (oldFocus != -1) {
335 TRACE(
"%p %p\n", infoPtr, hwndToolTip);
365 RECT tmpItemRect,clientRect;
371 (itemIndex < infoPtr->leftmostVisible)))
373 TRACE(
"Not Visible\n");
383 if (itemRect ==
NULL)
384 itemRect = &tmpItemRect;
449 TRACE(
"item %d tab h=%d, rect=(%s)\n",
453 if (selectedRect!=
NULL)
455 *selectedRect = *itemRect;
466 selectedRect->
left -= 2;
472 selectedRect->
right += 1;
481 selectedRect->
bottom -= 1;
520 newItem = infoPtr->
uFocus - 1;
523 newItem = infoPtr->
uFocus + 1;
528 if (newItem >= 0 && newItem < infoPtr->uNumItem && infoPtr->
uFocus != newItem)
586 for (iCount = 0; iCount < infoPtr->
uNumItem; iCount++)
604 TRACE(
"(%p, %p)\n", infoPtr, lptest);
660 TRACE(
"On Tab, item %d\n", newItem);
662 if ((newItem != -1) && (infoPtr->
iSelected != newItem))
746 if (tabIndex == -1)
return;
826 int* out_redrawLeave,
833 if (out_redrawLeave !=
NULL)
834 *out_redrawLeave = -1;
835 if (out_redrawEnter !=
NULL)
836 *out_redrawEnter = -1;
862 if (out_redrawLeave !=
NULL)
891 if (out_redrawEnter !=
NULL)
892 *out_redrawEnter =
item;
930 LONG *iRightBottom, *iLeftTop;
932 TRACE (
"hwnd=%p fLarger=%ld (%s)\n", infoPtr->
hwnd, fLarger,
992 if(nPos < infoPtr->leftmostVisible)
1014 const RECT* clientRect)
1022 INT vsize, tabwidth;
1049 controlPos.
left, controlPos.
top,
1058 controlPos.
left, controlPos.
top,
1070 vsize = clientRect->
right - (controlPos.
right - controlPos.
left + 1);
1074 for(; maxRange > 0; maxRange--)
1109 INT curItemRowCount;
1138 iTemp = clientRect.
bottom;
1140 clientRect.
right = iTemp;
1149 curItemRowCount = infoPtr->
uNumItem ? 1 : 0;
1154 INT icon_height = 0,
cx;
1164 if (fontMetrics.
tmHeight > icon_height)
1165 item_height = fontMetrics.
tmHeight + 2;
1167 item_height = icon_height;
1177 TRACE(
"tabH=%d, tmH=%d, iconh=%d\n",
1181 TRACE(
"client right=%d\n", clientRect.
right);
1197 for (curItem = 0; curItem < infoPtr->
uNumItem; curItem++)
1263 curr->
rect.
top = curItemRowCount - 1;
1304 infoPtr->
uNumRows = curItemRowCount;
1312 INT tabPerRow,remTab,iRow;
1324 for (iItm=0,iRow=0,iCount=0,curItemLeftPos=0;
1335 TRACE(
"r=%d, cl=%d, cl.r=%d, iCount=%d, iRow=%d, uNumRows=%d, remTab=%d, tabPerRow=%d\n",
1337 iCount, iRow, infoPtr->
uNumRows, remTab, tabPerRow);
1345 if (iCount >= ((iRow>=(
INT)infoPtr->
uNumRows - remTab)?tabPerRow + 1:tabPerRow)) {
1352 if (iCount >= ((iRow<remTab)?tabPerRow + 1:tabPerRow)) {
1379 INT widthDiff, iIndexStart=0, iIndexEnd=0;
1383 while(iIndexStart < infoPtr->uNumItem)
1391 for (iIndexEnd=iIndexStart;
1408 iCount = iIndexEnd - iIndexStart;
1413 widthDiff = widthDiff / iCount;
1415 for (iIndex=iIndexStart, iCount=0; iIndex < iIndexEnd; iIndex++, iCount++)
1419 item->rect.left += iCount * widthDiff;
1420 item->rect.right += (iCount + 1) * widthDiff;
1435 iIndexStart = iIndexEnd;
1444 for(iIndex = 0; iIndex < infoPtr->
uNumItem; iIndex++)
1448 rcOriginal = *rcItem;
1451 rcItem->
top = (rcOriginal.
left - clientRect.
left);
1453 rcItem->
left = rcOriginal.
top;
1472 RECT rTemp = *drawRect;
1494 deleteBrush =
FALSE;
1526 deleteBrush =
FALSE;
1571 drawRect = &localRect;
1580 *drawRect = selectedRect;
1582 *drawRect = itemRect;
1588 drawRect->
left += 4;
1590 drawRect->
right -= 4;
1617 drawRect->
left += 2;
1625 drawRect->
right += 1;
1629 drawRect->
right -= 2;
1667 (iItem == infoPtr->
uFocus) )
1669 RECT rFocus = *drawRect;
1711 drawRect->
right -= 1;
1725 if (infoPtr->
uFocus == iItem)
1753 INT center_offset_h, center_offset_v;
1756 rcImage = *drawRect;
1771 if (infoPtr->
himl &&
item->iImage != -1)
1781 center_offset_v = ((drawRect->
right - drawRect->
left) -
cx) / 2;
1786 center_offset_v = ((drawRect->
bottom - drawRect->
top) -
cy) / 2;
1798 if (center_offset_h < 2)
1799 center_offset_h = 2;
1801 if (center_offset_v < 0)
1802 center_offset_v = 0;
1804 TRACE(
"for <%s>, c_o_h=%d, c_o_v=%d, draw=(%s), textlen=%d\n",
1810 rcImage.
top = drawRect->
top + center_offset_h;
1814 rcImage.
left = drawRect->
right -
cx - center_offset_v;
1819 rcImage.
top = drawRect->
bottom -
cy - center_offset_h;
1820 rcImage.
left = drawRect->
left + center_offset_v;
1825 rcImage.
left = drawRect->
left + center_offset_h;
1826 rcImage.
top = drawRect->
top + center_offset_v;
1830 TRACE(
"drawing image=%d, left=%d, top=%d\n",
1848 center_offset_h = ((drawRect->
bottom - drawRect->
top) - (rcText.
right - rcText.
left)) / 2;
1850 center_offset_h = ((drawRect->
right - drawRect->
left) - (rcText.
right - rcText.
left)) / 2;
1855 drawRect->
top+=center_offset_h;
1857 drawRect->
bottom-=center_offset_h;
1859 center_offset_v = ((drawRect->
right - drawRect->
left) - (rcText.
bottom - rcText.
top)) / 2;
1863 drawRect->
left += center_offset_h;
1864 center_offset_v = ((drawRect->
bottom - drawRect->
top) - (rcText.
bottom - rcText.
top)) / 2;
1873 if (center_offset_v < 0)
1874 center_offset_v = 0;
1877 drawRect->
left += center_offset_v;
1879 drawRect->
top += center_offset_v;
1886 INT nEscapement = 900;
1887 INT nOrientation = 900;
1892 nOrientation = -900;
1921 TRACE(
"for <%s>, c_o_h=%d, c_o_v=%d, draw=(%s), textlen=%d\n",
1925 if (theme &&
item->pszText)
1934 else if (iItem == infoPtr->
uFocus)
2053 clRight =
rect.right;
2054 clBottom =
rect.bottom;
2075 static const int partIds[8] = {
2096 if(selectedRect.
left == 0)
2098 if(selectedRect.
right ==
r1.right)
2105 else if (iItem == infoPtr->
uFocus)
2124 if(selectedRect.
top == 0)
2127 if(selectedRect.
bottom == clBottom)
2136 TRACE(
"<right> item=%d, fill=(%s), edge=(%s)\n",
2158 r1.bottom =
r.bottom;
2165 if ((iItem == infoPtr->
iSelected) && (selectedRect.
top == 0)) {
2175 TRACE(
"<left> item=%d, fill=(%s), edge=(%s)\n",
2197 r1.bottom =
r.bottom;
2211 if(selectedRect.
left == 0)
2214 if(selectedRect.
right == clRight)
2227 TRACE(
"<bottom> item=%d, fill=(%s), edge=(%s)\n",
2240 r1.bottom =
r.bottom;
2249 r1.bottom =
r.bottom;
2260 if (selectedRect.
left == 0)
2279 TRACE(
"<top> item=%d, fill=(%s), edge=(%s)\n",
2397 TRACE(
"(%p)\n", infoPtr);
2437 iTargetRow = infoPtr->
uNumRows - 1;
2439 if (newselected != iTargetRow)
2449 if (
item->rect.left == newselected )
2450 item->rect.left = iTargetRow;
2453 if (
item->rect.left > newselected)
2464 if (
item->rect.top == newselected )
2465 item->rect.top = iTargetRow;
2468 if (
item->rect.top > newselected)
2537 RECT clientRect, rInvalidate, rAdjClient;
2541 if (lastRow < 0)
return;
2544 rInvalidate = clientRect;
2545 rAdjClient = clientRect;
2579 if (rInvalidate.
right > clientRect.
right -
r.left)
2580 rInvalidate.
right = rInvalidate.
right - (
r.right -
r.left);
2620 if (iItem < 0)
return -1;
2635 else if (iItem <= infoPtr->iSelected)
2665 TRACE(
"[%p]: added item %d %s\n",
2669 if (infoPtr->
uFocus == -1)
2697 TRACE(
"was h=%d,w=%d, now h=%d,w=%d\n",
2714 TRACE(
"(%p,%d)\n", infoPtr,
cx);
2732 TRACE(
"(%p,%d,%s)\n", infoPtr, iItem, fHighlight ?
"true" :
"false");
2734 if (iItem < 0 || iItem >= infoPtr->
uNumItem)
2738 oldState = *lpState;
2756 TRACE(
"(%p,%d,%p,%s)\n", infoPtr, iItem, tabItem, bUnicode ?
"true" :
"false");
2758 if (iItem < 0 || iItem >= infoPtr->
uNumItem)
2772 FIXME(
"TCIF_RTLREADING\n");
2807 TRACE(
"(%p,%d,%p,%s)\n", infoPtr, iItem, tabItem, bUnicode ?
"true" :
"false");
2809 if (!tabItem)
return FALSE;
2811 if (iItem < 0 || iItem >= infoPtr->
uNumItem)
2829 FIXME(
"TCIF_RTLREADING\n");
2852 TRACE(
"(%p, %d)\n", infoPtr, iItem);
2875 if (iItem <= infoPtr->iHotTracked)
2878 FIXME(
"Recalc hot track\n");
2885 else if (iItem < infoPtr->iSelected)
2896 TRACE(
"(%p)\n", infoPtr);
2905 TRACE(
"(%p) returning %p\n", infoPtr, infoPtr->
hFont);
2911 TRACE(
"(%p,%p)\n", infoPtr, hNewFont);
2913 infoPtr->
hFont = hNewFont;
2932 TRACE(
"himl=%p\n", himlNew);
2933 infoPtr->
himl = himlNew;
2941 TRACE(
"(%p)\n", infoPtr);
2949 TRACE(
"(%p %d)\n", infoPtr, bUnicode);
3003 infoPtr->hwnd =
hwnd;
3005 infoPtr->uNumItem = 0;
3006 infoPtr->uNumRows = 0;
3007 infoPtr->uHItemPadding = 6;
3008 infoPtr->uVItemPadding = 3;
3009 infoPtr->uHItemPadding_s = 6;
3010 infoPtr->uVItemPadding_s = 3;
3014 infoPtr->iSelected = -1;
3015 infoPtr->iHotTracked = -1;
3016 infoPtr->uFocus = -1;
3017 infoPtr->hwndToolTip = 0;
3018 infoPtr->DoRedraw =
TRUE;
3019 infoPtr->needsScrolling =
FALSE;
3020 infoPtr->hwndUpDown = 0;
3021 infoPtr->leftmostVisible = 0;
3022 infoPtr->fHeightSet =
FALSE;
3024 infoPtr->cbInfo =
sizeof(
LPARAM);
3026 TRACE(
"Created tab control, hwnd [%p]\n",
hwnd);
3036 infoPtr->dwStyle =
style;
3041 infoPtr->hwndToolTip =
3048 if (infoPtr->hwndToolTip) {
3079 infoPtr->uVItemPadding;
3085 infoPtr->tabMinWidth = -1;
3087 TRACE(
"tabH=%d, tabW=%d\n", infoPtr->tabHeight, infoPtr->tabWidth);
3102 for (iItem = infoPtr->
uNumItem - 1; iItem >= 0; iItem--)
3149 TRACE(
"(%p %d)\n", infoPtr, cbInfo);
3151 if (cbInfo < 0 || infoPtr->uNumItem)
return FALSE;
3153 infoPtr->
cbInfo = cbInfo;
3193 if (exMask == 0) exMask = ~0;
3197 FIXME(
"TCS_EX_REGISTERDROP style unimplemented\n");
3226 TRACE(
"(%p, %d)\n", infoPtr, excludesel);
3241 if (!excludesel && (
selected != -1))
3269 TRACE(
"(styletype=%lx, styleOld=0x%08x, styleNew=0x%08x)\n",
3427 case WM_STYLECHANGED:
3434 case WM_THEMECHANGED:
3454 WARN(
"unknown msg %04x wp=%08lx lp=%08lx\n",
HGDIOBJ WINAPI GetStockObject(_In_ int)
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)
#define BF_DIAGONAL_ENDTOPLEFT
HBRUSH COMCTL32_hPattern55AABrush
BOOL WINAPI RedrawWindow(_In_opt_ HWND, _In_opt_ LPCRECT, _In_opt_ HRGN, _In_ UINT)
GLint GLint GLsizei width
#define WM_SYSCOLORCHANGE
static void CALLBACK TAB_HotTrackTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
BOOL WINAPI InflateRect(_Inout_ LPRECT, _In_ int, _In_ int)
WINE_DEFAULT_DEBUG_CHANNEL(tab)
static void TAB_FocusChanging(const TAB_INFO *infoPtr)
#define TAB_HOTTRACK_TIMER
static LRESULT TAB_GetFont(const TAB_INFO *infoPtr)
HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF)
HDPA WINAPI DPA_Create(INT nGrow)
#define SELECTED_TAB_OFFSET
BOOL WINAPI GetTextMetricsW(_In_ HDC, _Out_ LPTEXTMETRICW)
static LRESULT TAB_DeleteItem(TAB_INFO *infoPtr, INT iItem)
#define TCM_SETUNICODEFORMAT
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define TCS_EX_REGISTERDROP
BOOL WINAPI DPA_Destroy(HDPA hdpa)
static LRESULT TAB_SetMinTabWidth(TAB_INFO *infoPtr, INT cx)
HDC WINAPI GetDC(_In_opt_ HWND)
#define GET_DEFAULT_MIN_TAB_WIDTH(infoPtr)
#define TCM_HIGHLIGHTITEM
#define FLAT_BTN_SPACINGX
static LRESULT TAB_LButtonDown(TAB_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
#define BF_DIAGONAL_ENDTOPRIGHT
GLdouble GLdouble GLdouble r
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define ROUND_CORNER_SIZE
BOOL WINAPI DrawFocusRect(_In_ HDC, _In_ LPCRECT)
static void TAB_DrawLoneItemInterior(const TAB_INFO *infoPtr, int iItem)
static void TAB_DrawItem(const TAB_INFO *infoPtr, HDC hdc, INT iItem)
static LRESULT TAB_HighlightItem(TAB_INFO *infoPtr, INT iItem, BOOL fHighlight)
#define TAB_GetInfoPtr(hwnd)
static const WCHAR themeClass[]
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
static void TAB_EraseTabInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, const RECT *drawRect)
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
LONG WINAPI GetMessageTime(void)
static LRESULT TAB_MouseMove(TAB_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
static void TAB_KillFocus(TAB_INFO *infoPtr)
HWND WINAPI SetFocus(_In_opt_ HWND)
static LRESULT TAB_Paint(TAB_INFO *infoPtr, HDC hdcPaint)
static LRESULT TAB_GetItemCount(const TAB_INFO *infoPtr)
DWORD WINAPI GetMessagePos(void)
BOOL WINAPI Str_SetPtrW(LPWSTR *lppDest, LPCWSTR lpSrc)
#define GetWindowLongPtrW
BOOL WINAPI ImageList_Draw(HIMAGELIST himl, INT i, HDC hdc, INT x, INT y, UINT fStyle)
#define DISPLAY_AREA_PADDINGX
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
#define DEFAULT_MIN_TAB_WIDTH
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
#define TCS_EX_FLATSEPARATORS
BOOL WINAPI DestroyWindow(_In_ HWND)
HRESULT WINAPI DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
static INT TAB_InternalHitTest(const TAB_INFO *infoPtr, POINT pt, UINT *flags)
static BOOL TAB_GetItemRect(const TAB_INFO *infoPtr, INT item, RECT *rect)
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free
static LRESULT TAB_SetImageList(TAB_INFO *infoPtr, HIMAGELIST himlNew)
static LRESULT TAB_GetUnicodeFormat(const TAB_INFO *infoPtr)
static void TAB_RButtonUp(const TAB_INFO *infoPtr)
static LRESULT TAB_Create(HWND hwnd, LPARAM lParam)
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
#define TAB_HOTTRACK_TIMER_INTERVAL
static LRESULT TAB_GetExtendedStyle(const TAB_INFO *infoPtr)
INT Str_GetPtrWtoA(LPCWSTR lpSrc, LPSTR lpDest, INT nMaxLen) DECLSPEC_HIDDEN
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
int WINAPI SetBkMode(_In_ HDC, _In_ int)
static TAB_ITEM * TAB_GetItem(const TAB_INFO *infoPtr, INT i)
static LRESULT TAB_SetItemT(TAB_INFO *infoPtr, INT iItem, LPTCITEMW tabItem, BOOL bUnicode)
static LRESULT TAB_NCCalcSize(WPARAM wParam)
static LRESULT TAB_NCHitTest(const TAB_INFO *infoPtr, LPARAM lParam)
#define TCIS_BUTTONPRESSED
#define BF_DIAGONAL_ENDBOTTOMLEFT
LONG WINAPI SetWindowLongW(_In_ HWND, _In_ int, _In_ LONG)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
BOOL WINAPI DrawEdge(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
static char selected[MAX_PATH+1]
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
_Out_opt_ int _Out_opt_ int * cy
static LRESULT TAB_AdjustRect(const TAB_INFO *infoPtr, WPARAM fLarger, LPRECT prc)
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
#define TCM_SETEXTENDEDSTYLE
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
static void TAB_DumpItemInternal(const TAB_INFO *infoPtr, UINT iItem)
#define TCM_SETMINTABWIDTH
static LRESULT TAB_HitTest(const TAB_INFO *infoPtr, LPTCHITTESTINFO lptest)
#define TCS_FORCEICONLEFT
COLORREF clrHighlightText
static BOOL TAB_InternalGetItemRect(const TAB_INFO *, INT, RECT *, RECT *)
static void TAB_RecalcHotTrack(TAB_INFO *infoPtr, const LPARAM *pos, int *out_redrawLeave, int *out_redrawEnter)
#define CONTROL_BORDER_SIZEX
static LRESULT TAB_GetToolTips(const TAB_INFO *infoPtr)
static BOOL TAB_SendSimpleNotify(const TAB_INFO *infoPtr, UINT code)
static LRESULT TAB_SetUnicodeFormat(TAB_INFO *infoPtr, BOOL bUnicode)
static LRESULT TAB_SetRedraw(TAB_INFO *infoPtr, BOOL doRedraw)
static void TAB_DumpItemExternalT(const TCITEMW *pti, UINT iItem, BOOL isW)
BOOL WINAPI IsWindowUnicode(_In_ HWND)
static void hottrack_refresh(const TAB_INFO *infoPtr, int tabIndex)
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
static LRESULT TAB_KeyDown(TAB_INFO *infoPtr, WPARAM keyCode, LPARAM lParam)
static LRESULT TAB_InsertItemT(TAB_INFO *infoPtr, INT iItem, const TCITEMW *pti, BOOL bUnicode)
#define TCS_FORCELABELLEFT
double __cdecl remainder(double, double)
static LRESULT TAB_Size(TAB_INFO *infoPtr)
#define DISPLAY_AREA_PADDINGY
static LRESULT TAB_DeselectAll(TAB_INFO *, BOOL)
static void TAB_EnsureSelectionVisible(TAB_INFO *)
static LRESULT TAB_SetItemSize(TAB_INFO *infoPtr, INT cx, INT cy)
#define BF_DIAGONAL_ENDBOTTOMRIGHT
const char * wine_dbgstr_rect(const RECT *rect)
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define TCM_GETUNICODEFORMAT
PVOID Alloc(IN DWORD dwFlags, IN SIZE_T dwBytes)
int WINAPI GetSystemMetrics(_In_ int)
static void TAB_SetItemBounds(TAB_INFO *infoPtr)
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
unsigned __int3264 UINT_PTR
static LRESULT TAB_SetCurFocus(TAB_INFO *infoPtr, INT iItem)
HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR classlist)
COMCTL32_SysColor comctl32_color
#define TCS_OWNERDRAWFIXED
HTHEME WINAPI GetWindowTheme(HWND hwnd)
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
void TAB_Unregister(void)
BOOL WINAPI ImageList_Remove(HIMAGELIST himl, INT i)
INT WINAPI DPA_InsertPtr(HDPA hdpa, INT i, LPVOID p)
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
static void TAB_SetupScrolling(TAB_INFO *infoPtr, const RECT *clientRect)
static LRESULT TAB_SetExtendedStyle(TAB_INFO *infoPtr, DWORD exMask, DWORD exStyle)
#define memcpy(s1, s2, n)
static LRESULT TAB_GetImageList(const TAB_INFO *infoPtr)
BOOL WINAPI SetRectEmpty(_Out_ LPRECT)
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)
static INT TAB_StyleChanged(TAB_INFO *infoPtr, WPARAM wStyleType, const STYLESTRUCT *lpss)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define EXTRA_ICON_PADDING
static void TAB_InvalidateTabArea(const TAB_INFO *)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
#define EXTRA_ITEM_SIZE(infoPtr)
static void TAB_DrawItemInterior(const TAB_INFO *, HDC, INT, RECT *)
#define CONTROL_BORDER_SIZEY
static const WCHAR emptyW[]
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
static LRESULT TAB_SetPadding(TAB_INFO *infoPtr, LPARAM lParam)
int WINAPI ExcludeClipRect(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
struct tagCREATESTRUCTW * LPCREATESTRUCTW
#define TAB_ITEM_SIZE(infoPtr)
static LRESULT TAB_Destroy(TAB_INFO *infoPtr)
static LRESULT TAB_SetFont(TAB_INFO *infoPtr, HFONT hNewFont)
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
HWND WINAPI WindowFromPoint(_In_ POINT)
static LRESULT TAB_SetCurSel(TAB_INFO *infoPtr, INT iItem)
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static LRESULT TAB_DeleteAllItems(TAB_INFO *infoPtr)
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
HWND WINAPI GetFocus(void)
HRESULT WINAPI GetThemeBackgroundContentRect(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pBoundingRect, RECT *pContentRect)
static LRESULT TAB_GetCurFocus(const TAB_INFO *infoPtr)
LPVOID WINAPI DPA_DeletePtr(HDPA hdpa, INT i)
BOOL WINAPI ImageList_GetIconSize(HIMAGELIST himl, INT *cx, INT *cy)
static DWORD TAB_GetRowCount(const TAB_INFO *infoPtr)
static LRESULT TAB_RemoveImage(TAB_INFO *infoPtr, INT image)
static void TAB_Refresh(const TAB_INFO *infoPtr, HDC hdc)
static LRESULT TAB_LButtonUp(const TAB_INFO *infoPtr)
BOOL COMCTL32_IsReflectedMessage(UINT uMsg) DECLSPEC_HIDDEN
static LRESULT TAB_OnHScroll(TAB_INFO *infoPtr, int nScrollCode, int nPos)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
static LRESULT TAB_GetItemT(TAB_INFO *infoPtr, INT iItem, LPTCITEMW tabItem, BOOL bUnicode)
#define SetWindowLongPtrW
static LRESULT theme_changed(const TAB_INFO *infoPtr)
static LRESULT TAB_SetToolTips(TAB_INFO *infoPtr, HWND hwndToolTip)
static LRESULT WINAPI TAB_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
static void TAB_RelayEvent(HWND hwndTip, HWND hwndMsg, UINT uMsg, WPARAM wParam, LPARAM lParam)
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
#define TCM_GETEXTENDEDSTYLE
static LRESULT TAB_GetCurSel(const TAB_INFO *infoPtr)
static LRESULT TAB_SetItemExtra(TAB_INFO *infoPtr, INT cbInfo)
#define TCM_DELETEALLITEMS
#define NM_TOOLTIPSCREATED
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
HBRUSH WINAPI GetSysColorBrush(_In_ int)
VOID COMCTL32_RefreshSysColors(void) DECLSPEC_HIDDEN
HRESULT WINAPI CloseThemeData(HTHEME hTheme)
BOOL WINAPI GetTextExtentPoint32W(_In_ HDC hdc, _In_reads_(c) LPCWSTR lpString, _In_ int c, _Out_ LPSIZE psizl)
static void TAB_DrawBorder(const TAB_INFO *infoPtr, HDC hdc)
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)