From 9da93dd879232310d13de369a8f0961a13b2f576 Mon Sep 17 00:00:00 2001 From: "Dimitrie O. Paun" Date: Mon, 11 Apr 2005 14:21:15 +0000 Subject: [PATCH] Tab unicodification. --- dlls/comctl32/tab.c | 168 +++++++++++++++++++++++----------------------------- 1 file changed, 73 insertions(+), 95 deletions(-) diff --git a/dlls/comctl32/tab.c b/dlls/comctl32/tab.c index 2714009ad13..c784185aa88 100644 --- a/dlls/comctl32/tab.c +++ b/dlls/comctl32/tab.c @@ -21,7 +21,6 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * TODO: - * Unicode support (under construction) * * Styles: * TCIF_RTLREADING @@ -144,7 +143,7 @@ TAB_SendSimpleNotify (const TAB_INFO *infoPtr, UINT code) (WPARAM) nmhdr.idFrom, (LPARAM) &nmhdr); } -static VOID +static void TAB_RelayEvent (HWND hwndTip, HWND hwndMsg, UINT uMsg, WPARAM wParam, LPARAM lParam) { @@ -162,25 +161,13 @@ TAB_RelayEvent (HWND hwndTip, HWND hwndMsg, UINT uMsg, } static void -TAB_DumpItemExternalA(TCITEMA *pti, UINT iItem) -{ - if (TRACE_ON(tab)) { - TRACE("external tab %d, mask=0x%08x, dwState=0x%08x, dwStateMask=0x%08x, cchTextMax=0x%08x\n", - iItem, pti->mask, pti->dwState, pti->dwStateMask, pti->cchTextMax); - TRACE("external tab %d, iImage=%d, lParam=0x%08lx, pszTextA=%s\n", - iItem, pti->iImage, pti->lParam, debugstr_a(pti->pszText)); - } -} - - -static void -TAB_DumpItemExternalW(TCITEMW *pti, UINT iItem) +TAB_DumpItemExternalT(TCITEMW *pti, UINT iItem, BOOL isW) { if (TRACE_ON(tab)) { TRACE("external tab %d, mask=0x%08x, dwState=0x%08lx, dwStateMask=0x%08lx, cchTextMax=0x%08x\n", iItem, pti->mask, pti->dwState, pti->dwStateMask, pti->cchTextMax); TRACE("external tab %d, iImage=%d, lParam=0x%08lx, pszTextW=%s\n", - iItem, pti->iImage, pti->lParam, debugstr_w(pti->pszText)); + iItem, pti->iImage, pti->lParam, isW ? debugstr_w(pti->pszText) : debugstr_a((LPSTR)pti->pszText)); } } @@ -246,7 +233,7 @@ static LRESULT TAB_SetCurFocus (TAB_INFO *infoPtr, INT iItem) { if (iItem < 0 || iItem >= infoPtr->uNumItem) return 0; - if (GetWindowLongA(infoPtr->hwnd, GWL_STYLE) & TCS_BUTTONS) { + if (GetWindowLongW(infoPtr->hwnd, GWL_STYLE) & TCS_BUTTONS) { FIXME("Should set input focus\n"); } else { int oldFocus = infoPtr->uFocus; @@ -302,7 +289,7 @@ static BOOL TAB_InternalGetItemRect( RECT* selectedRect) { RECT tmpItemRect,clientRect; - LONG lStyle = GetWindowLongA(infoPtr->hwnd, GWL_STYLE); + LONG lStyle = GetWindowLongW(infoPtr->hwnd, GWL_STYLE); /* Perform a sanity check and a trivial visibility check. */ if ( (infoPtr->uNumItem <= 0) || @@ -472,7 +459,7 @@ static LRESULT TAB_KeyUp(TAB_INFO* infoPtr, WPARAM keyCode) * This method is called whenever the focus goes in or out of this control * it is used to update the visual state of the control. */ -static VOID TAB_FocusChanging(const TAB_INFO *infoPtr) +static void TAB_FocusChanging(const TAB_INFO *infoPtr) { RECT selectedRect; BOOL isVisible; @@ -566,7 +553,7 @@ TAB_LButtonDown (TAB_INFO *infoPtr, WPARAM wParam, LPARAM lParam) TAB_RelayEvent (infoPtr->hwndToolTip, infoPtr->hwnd, WM_LBUTTONDOWN, wParam, lParam); - if (GetWindowLongA(infoPtr->hwnd, GWL_STYLE) & TCS_FOCUSONBUTTONDOWN ) { + if (GetWindowLongW(infoPtr->hwnd, GWL_STYLE) & TCS_FOCUSONBUTTONDOWN ) { SetFocus (infoPtr->hwnd); } @@ -648,7 +635,7 @@ TAB_DrawLoneItemInterior(TAB_INFO* infoPtr, int iItem) * we can check if the mouse has left our window. If so, we un-highlight * the hot-tracked tab. */ -static VOID CALLBACK +static void CALLBACK TAB_HotTrackTimerProc ( HWND hwnd, /* handle of window for timer messages */ @@ -717,7 +704,7 @@ TAB_RecalcHotTrack if (out_redrawEnter != NULL) *out_redrawEnter = -1; - if (GetWindowLongA(infoPtr->hwnd, GWL_STYLE) & TCS_HOTTRACK) + if (GetWindowLongW(infoPtr->hwnd, GWL_STYLE) & TCS_HOTTRACK) { POINT pt; UINT flags; @@ -814,7 +801,7 @@ static LRESULT TAB_AdjustRect( WPARAM fLarger, LPRECT prc) { - DWORD lStyle = GetWindowLongA(infoPtr->hwnd, GWL_STYLE); + DWORD lStyle = GetWindowLongW(infoPtr->hwnd, GWL_STYLE); LONG *iRightBottom, *iLeftTop; TRACE ("hwnd=%p fLarger=%d (%ld,%ld)-(%ld,%ld)\n", infoPtr->hwnd, fLarger, prc->left, prc->top, prc->right, prc->bottom); @@ -903,8 +890,10 @@ static void TAB_SetupScrolling( TAB_INFO* infoPtr, const RECT* clientRect) { + static const WCHAR msctls_updown32W[] = { 'm','s','c','t','l','s','_','u','p','d','o','w','n','3','2',0 }; + static const WCHAR emptyW[] = { 0 }; INT maxRange = 0; - DWORD lStyle = GetWindowLongA(hwnd, GWL_STYLE); + DWORD lStyle = GetWindowLongW(hwnd, GWL_STYLE); if (infoPtr->needsScrolling) { @@ -953,16 +942,12 @@ static void TAB_SetupScrolling( */ if (infoPtr->hwndUpDown==0) { - infoPtr->hwndUpDown = CreateWindowA("msctls_updown32", - "", + infoPtr->hwndUpDown = CreateWindowW(msctls_updown32W, emptyW, WS_VISIBLE | WS_CHILD | UDS_HORZ, controlPos.left, controlPos.top, controlPos.right - controlPos.left, controlPos.bottom - controlPos.top, - hwnd, - NULL, - NULL, - NULL); + hwnd, NULL, NULL, NULL); } else { @@ -1016,8 +1001,8 @@ static void TAB_SetupScrolling( */ static void TAB_SetItemBounds (TAB_INFO *infoPtr) { - LONG lStyle = GetWindowLongA(infoPtr->hwnd, GWL_STYLE); - TEXTMETRICA fontMetrics; + LONG lStyle = GetWindowLongW(infoPtr->hwnd, GWL_STYLE); + TEXTMETRICW fontMetrics; UINT curItem; INT curItemLeftPos; INT curItemRowCount; @@ -1069,7 +1054,7 @@ static void TAB_SetItemBounds (TAB_INFO *infoPtr) int icon_height = 0; /* Use the current font to determine the height of a tab. */ - GetTextMetricsA(hdc, &fontMetrics); + GetTextMetricsW(hdc, &fontMetrics); /* Get the icon height */ if (infoPtr->himl) @@ -1374,7 +1359,7 @@ TAB_EraseTabInterior RECT* drawRect ) { - LONG lStyle = GetWindowLongA(infoPtr->hwnd, GWL_STYLE); + LONG lStyle = GetWindowLongW(infoPtr->hwnd, GWL_STYLE); HBRUSH hbr = CreateSolidBrush (comctl32_color.clrBtnFace); BOOL deleteBrush = TRUE; RECT rTemp = *drawRect; @@ -1441,7 +1426,7 @@ TAB_DrawItemInterior RECT* drawRect ) { - LONG lStyle = GetWindowLongA(infoPtr->hwnd, GWL_STYLE); + LONG lStyle = GetWindowLongW(infoPtr->hwnd, GWL_STYLE); RECT localRect; @@ -1757,7 +1742,8 @@ TAB_DrawItemInterior /* Draw the text */ if(lStyle & TCS_VERTICAL) /* if we are vertical rotate the text and each character */ { - LOGFONTA logfont; + static const WCHAR ArialW[] = { 'A','r','i','a','l',0 }; + LOGFONTW logfont; HFONT hFont = 0; INT nEscapement = 900; INT nOrientation = 900; @@ -1770,13 +1756,13 @@ TAB_DrawItemInterior /* to get a font with the escapement and orientation we are looking for, we need to */ /* call CreateFontIndirectA, which requires us to set the values of the logfont we pass in */ - if (!GetObjectA((infoPtr->hFont) ? + if (!GetObjectW((infoPtr->hFont) ? infoPtr->hFont : GetStockObject(SYSTEM_FONT), - sizeof(LOGFONTA),&logfont)) + sizeof(LOGFONTW),&logfont)) { INT iPointSize = 9; - lstrcpyA(logfont.lfFaceName, "Arial"); + lstrcpyW(logfont.lfFaceName, ArialW); logfont.lfHeight = -MulDiv(iPointSize, GetDeviceCaps(hdc, LOGPIXELSY), 72); logfont.lfWeight = FW_NORMAL; @@ -1787,7 +1773,7 @@ TAB_DrawItemInterior logfont.lfEscapement = nEscapement; logfont.lfOrientation = nOrientation; - hFont = CreateFontIndirectA(&logfont); + hFont = CreateFontIndirectW(&logfont); SelectObject(hdc, hFont); if (item->pszText) @@ -1845,7 +1831,7 @@ static void TAB_DrawItem( HDC hdc, INT iItem) { - LONG lStyle = GetWindowLongA(infoPtr->hwnd, GWL_STYLE); + LONG lStyle = GetWindowLongW(infoPtr->hwnd, GWL_STYLE); RECT itemRect; RECT selectedRect; BOOL isVisible; @@ -1957,7 +1943,7 @@ static void TAB_DrawItem( /* Clear interior */ SetBkColor(hdc, bkgnd); - ExtTextOutA(hdc, 0, 0, 2, &fillRect, NULL, 0, 0); + ExtTextOutW(hdc, 0, 0, 2, &fillRect, NULL, 0, 0); /* Draw rectangular edge around tab */ DrawEdge(hdc, &r, EDGE_RAISED, BF_SOFT|BF_RIGHT|BF_TOP|BF_BOTTOM); @@ -1968,7 +1954,7 @@ static void TAB_DrawItem( r1.top = r.top; r1.right = r.right; r1.bottom = r1.top + ROUND_CORNER_SIZE; - ExtTextOutA(hdc, 0, 0, 2, &r1, NULL, 0, 0); + ExtTextOutW(hdc, 0, 0, 2, &r1, NULL, 0, 0); r1.right--; DrawEdge(hdc, &r1, EDGE_RAISED, BF_SOFT|BF_DIAGONAL_ENDTOPLEFT); @@ -1977,7 +1963,7 @@ static void TAB_DrawItem( r1.bottom = r.bottom; r1.right = r.right; r1.top = r1.bottom - ROUND_CORNER_SIZE; - ExtTextOutA(hdc, 0, 0, 2, &r1, NULL, 0, 0); + ExtTextOutW(hdc, 0, 0, 2, &r1, NULL, 0, 0); r1.right--; DrawEdge(hdc, &r1, EDGE_RAISED, BF_SOFT|BF_DIAGONAL_ENDBOTTOMLEFT); @@ -1998,7 +1984,7 @@ static void TAB_DrawItem( /* Clear interior */ SetBkColor(hdc, bkgnd); - ExtTextOutA(hdc, 0, 0, 2, &fillRect, NULL, 0, 0); + ExtTextOutW(hdc, 0, 0, 2, &fillRect, NULL, 0, 0); /* Draw rectangular edge around tab */ DrawEdge(hdc, &r, EDGE_RAISED, BF_SOFT|BF_LEFT|BF_TOP|BF_BOTTOM); @@ -2009,7 +1995,7 @@ static void TAB_DrawItem( r1.top = r.top; r1.right = r1.left + ROUND_CORNER_SIZE + 1; r1.bottom = r1.top + ROUND_CORNER_SIZE; - ExtTextOutA(hdc, 0, 0, 2, &r1, NULL, 0, 0); + ExtTextOutW(hdc, 0, 0, 2, &r1, NULL, 0, 0); r1.left++; DrawEdge(hdc, &r1, EDGE_RAISED, BF_SOFT|BF_DIAGONAL_ENDTOPRIGHT); @@ -2018,7 +2004,7 @@ static void TAB_DrawItem( r1.bottom = r.bottom; r1.right = r1.left + ROUND_CORNER_SIZE + 1; r1.top = r1.bottom - ROUND_CORNER_SIZE; - ExtTextOutA(hdc, 0, 0, 2, &r1, NULL, 0, 0); + ExtTextOutW(hdc, 0, 0, 2, &r1, NULL, 0, 0); r1.left++; DrawEdge(hdc, &r1, EDGE_SUNKEN, BF_DIAGONAL_ENDTOPLEFT); } @@ -2052,7 +2038,7 @@ static void TAB_DrawItem( /* Clear interior */ SetBkColor(hdc, bkgnd); - ExtTextOutA(hdc, 0, 0, 2, &fillRect, NULL, 0, 0); + ExtTextOutW(hdc, 0, 0, 2, &fillRect, NULL, 0, 0); /* Draw rectangular edge around tab */ DrawEdge(hdc, &r, EDGE_RAISED, BF_SOFT|BF_LEFT|BF_BOTTOM|BF_RIGHT); @@ -2063,7 +2049,7 @@ static void TAB_DrawItem( r1.bottom = r.bottom; r1.right = r.right; r1.top = r1.bottom - ROUND_CORNER_SIZE - 1; - ExtTextOutA(hdc, 0, 0, 2, &r1, NULL, 0, 0); + ExtTextOutW(hdc, 0, 0, 2, &r1, NULL, 0, 0); r1.bottom--; DrawEdge(hdc, &r1, EDGE_RAISED, BF_SOFT|BF_DIAGONAL_ENDBOTTOMLEFT); @@ -2072,7 +2058,7 @@ static void TAB_DrawItem( r1.bottom = r.bottom; r1.right = r1.left + ROUND_CORNER_SIZE; r1.top = r1.bottom - ROUND_CORNER_SIZE - 1; - ExtTextOutA(hdc, 0, 0, 2, &r1, NULL, 0, 0); + ExtTextOutW(hdc, 0, 0, 2, &r1, NULL, 0, 0); r1.bottom--; DrawEdge(hdc, &r1, EDGE_RAISED, BF_SOFT|BF_DIAGONAL_ENDTOPLEFT); @@ -2106,7 +2092,7 @@ static void TAB_DrawItem( /* Clear interior */ SetBkColor(hdc, bkgnd); - ExtTextOutA(hdc, 0, 0, 2, &fillRect, NULL, 0, 0); + ExtTextOutW(hdc, 0, 0, 2, &fillRect, NULL, 0, 0); /* Draw rectangular edge around tab */ DrawEdge(hdc, &r, EDGE_RAISED, BF_SOFT|BF_LEFT|BF_TOP|BF_RIGHT); @@ -2117,7 +2103,7 @@ static void TAB_DrawItem( r1.top = r.top; r1.right = r.right; r1.bottom = r1.top + ROUND_CORNER_SIZE + 1; - ExtTextOutA(hdc, 0, 0, 2, &r1, NULL, 0, 0); + ExtTextOutW(hdc, 0, 0, 2, &r1, NULL, 0, 0); r1.top++; DrawEdge(hdc, &r1, EDGE_RAISED, BF_SOFT|BF_DIAGONAL_ENDBOTTOMRIGHT); @@ -2126,7 +2112,7 @@ static void TAB_DrawItem( r1.top = r.top; r1.right = r1.left + ROUND_CORNER_SIZE; r1.bottom = r1.top + ROUND_CORNER_SIZE + 1; - ExtTextOutA(hdc, 0, 0, 2, &r1, NULL, 0, 0); + ExtTextOutW(hdc, 0, 0, 2, &r1, NULL, 0, 0); r1.top++; DrawEdge(hdc, &r1, EDGE_RAISED, BF_SOFT|BF_DIAGONAL_ENDTOPRIGHT); } @@ -2149,7 +2135,7 @@ static void TAB_DrawItem( static void TAB_DrawBorder (TAB_INFO *infoPtr, HDC hdc) { RECT rect; - DWORD lStyle = GetWindowLongA(infoPtr->hwnd, GWL_STYLE); + DWORD lStyle = GetWindowLongW(infoPtr->hwnd, GWL_STYLE); GetClientRect (infoPtr->hwnd, &rect); @@ -2190,7 +2176,7 @@ static void TAB_Refresh (TAB_INFO *infoPtr, HDC hdc) hOldFont = SelectObject (hdc, infoPtr->hFont); - if (GetWindowLongA(infoPtr->hwnd, GWL_STYLE) & TCS_BUTTONS) + if (GetWindowLongW(infoPtr->hwnd, GWL_STYLE) & TCS_BUTTONS) { for (i = 0; i < infoPtr->uNumItem; i++) TAB_DrawItem (infoPtr, hdc, i); @@ -2241,7 +2227,7 @@ static void TAB_EnsureSelectionVisible( TAB_INFO* infoPtr) { INT iSelected = infoPtr->iSelected; - LONG lStyle = GetWindowLongA(infoPtr->hwnd, GWL_STYLE); + LONG lStyle = GetWindowLongW(infoPtr->hwnd, GWL_STYLE); INT iOrigLeftmostVisible = infoPtr->leftmostVisible; /* set the items row to the bottommost row or topmost row depending on @@ -2360,7 +2346,7 @@ static void TAB_EnsureSelectionVisible( static void TAB_InvalidateTabArea(TAB_INFO* infoPtr) { RECT clientRect, rInvalidate, rAdjClient; - DWORD lStyle = GetWindowLongA(infoPtr->hwnd, GWL_STYLE); + DWORD lStyle = GetWindowLongW(infoPtr->hwnd, GWL_STYLE); INT lastRow = infoPtr->uNumRows - 1; RECT rect; @@ -2439,10 +2425,10 @@ static inline LRESULT TAB_Paint (TAB_INFO *infoPtr, HDC hdcPaint) } static LRESULT -TAB_InsertItemAW (TAB_INFO *infoPtr, WPARAM wParam, LPARAM lParam, BOOL bUnicode) +TAB_InsertItemT (TAB_INFO *infoPtr, WPARAM wParam, LPARAM lParam, BOOL bUnicode) { TAB_ITEM *item; - TCITEMA *pti; + TCITEMW *pti; INT iItem; RECT rect; @@ -2450,17 +2436,14 @@ TAB_InsertItemAW (TAB_INFO *infoPtr, WPARAM wParam, LPARAM lParam, BOOL bUnicode TRACE("Rect: %p T %li, L %li, B %li, R %li\n", infoPtr->hwnd, rect.top, rect.left, rect.bottom, rect.right); - pti = (TCITEMA *)lParam; + pti = (TCITEMW *)lParam; iItem = (INT)wParam; if (iItem < 0) return -1; if (iItem > infoPtr->uNumItem) iItem = infoPtr->uNumItem; - if (bUnicode) - TAB_DumpItemExternalW((TCITEMW*)pti, iItem); - else - TAB_DumpItemExternalA(pti, iItem); + TAB_DumpItemExternalT(pti, iItem, bUnicode); if (infoPtr->uNumItem == 0) { @@ -2502,9 +2485,9 @@ TAB_InsertItemAW (TAB_INFO *infoPtr, WPARAM wParam, LPARAM lParam, BOOL bUnicode if (pti->mask & TCIF_TEXT) { if (bUnicode) - Str_SetPtrW (&item->pszText, (WCHAR*)pti->pszText); + Str_SetPtrW (&item->pszText, pti->pszText); else - Str_SetPtrAtoW (&item->pszText, pti->pszText); + Str_SetPtrAtoW (&item->pszText, (LPSTR)pti->pszText); } if (pti->mask & TCIF_IMAGE) @@ -2532,7 +2515,7 @@ TAB_InsertItemAW (TAB_INFO *infoPtr, WPARAM wParam, LPARAM lParam, BOOL bUnicode static LRESULT TAB_SetItemSize (TAB_INFO *infoPtr, LPARAM lParam) { - LONG lStyle = GetWindowLongA(infoPtr->hwnd, GWL_STYLE); + LONG lStyle = GetWindowLongW(infoPtr->hwnd, GWL_STYLE); LONG lResult = 0; BOOL bNeedPaint = FALSE; @@ -2600,7 +2583,7 @@ TAB_HighlightItem (TAB_INFO *infoPtr, INT iItem, BOOL fHighlight) } static LRESULT -TAB_SetItemAW (TAB_INFO *infoPtr, INT iItem, LPTCITEMA tabItem, BOOL bUnicode) +TAB_SetItemT (TAB_INFO *infoPtr, INT iItem, LPTCITEMW tabItem, BOOL bUnicode) { TAB_ITEM *wineItem; @@ -2609,10 +2592,7 @@ TAB_SetItemAW (TAB_INFO *infoPtr, INT iItem, LPTCITEMA tabItem, BOOL bUnicode) if (iItem < 0 || iItem >= infoPtr->uNumItem) return FALSE; - if (bUnicode) - TAB_DumpItemExternalW((TCITEMW *)tabItem, iItem); - else - TAB_DumpItemExternalA(tabItem, iItem); + TAB_DumpItemExternalT(tabItem, iItem, bUnicode); wineItem = TAB_GetItem(infoPtr, iItem); @@ -2636,9 +2616,9 @@ TAB_SetItemAW (TAB_INFO *infoPtr, INT iItem, LPTCITEMA tabItem, BOOL bUnicode) wineItem->pszText = NULL; } if (bUnicode) - Str_SetPtrW(&wineItem->pszText, (WCHAR*)tabItem->pszText); + Str_SetPtrW(&wineItem->pszText, tabItem->pszText); else - Str_SetPtrAtoW(&wineItem->pszText, tabItem->pszText); + Str_SetPtrAtoW(&wineItem->pszText, (LPSTR)tabItem->pszText); } /* Update and repaint tabs */ @@ -2655,7 +2635,7 @@ static inline LRESULT TAB_GetItemCount (const TAB_INFO *infoPtr) static LRESULT -TAB_GetItemAW (TAB_INFO *infoPtr, INT iItem, LPTCITEMA tabItem, BOOL bUnicode) +TAB_GetItemT (TAB_INFO *infoPtr, INT iItem, LPTCITEMW tabItem, BOOL bUnicode) { TAB_ITEM *wineItem; @@ -2681,15 +2661,12 @@ TAB_GetItemAW (TAB_INFO *infoPtr, INT iItem, LPTCITEMA tabItem, BOOL bUnicode) if (tabItem->mask & TCIF_TEXT) { if (bUnicode) - Str_GetPtrW (wineItem->pszText, (WCHAR*)tabItem->pszText, tabItem->cchTextMax); + Str_GetPtrW (wineItem->pszText, tabItem->pszText, tabItem->cchTextMax); else - Str_GetPtrWtoA (wineItem->pszText, tabItem->pszText, tabItem->cchTextMax); + Str_GetPtrWtoA (wineItem->pszText, (LPSTR)tabItem->pszText, tabItem->cchTextMax); } - if (bUnicode) - TAB_DumpItemExternalW((TCITEMW*)tabItem, iItem); - else - TAB_DumpItemExternalA(tabItem, iItem); + TAB_DumpItemExternalT(tabItem, iItem, bUnicode); return TRUE; } @@ -2835,7 +2812,7 @@ static inline LRESULT TAB_Size (TAB_INFO *infoPtr) GetClientRect(parent, &parent_rect); cx=LOWORD (lParam); cy=HIWORD (lParam); - if (GetWindowLongA(hwnd, GWL_STYLE) & CCS_NORESIZE) + if (GetWindowLongW(hwnd, GWL_STYLE) & CCS_NORESIZE) uPosFlags |= (SWP_NOSIZE | SWP_NOMOVE); SetWindowPos (hwnd, 0, parent_rect.left, parent_rect.top, @@ -2857,14 +2834,14 @@ static inline LRESULT TAB_Size (TAB_INFO *infoPtr) static LRESULT TAB_Create (HWND hwnd, WPARAM wParam, LPARAM lParam) { TAB_INFO *infoPtr; - TEXTMETRICA fontMetrics; + TEXTMETRICW fontMetrics; HDC hdc; HFONT hOldFont; DWORD dwStyle; infoPtr = (TAB_INFO *)Alloc (sizeof(TAB_INFO)); - SetWindowLongA(hwnd, 0, (DWORD)infoPtr); + SetWindowLongPtrW(hwnd, 0, (DWORD_PTR)infoPtr); infoPtr->hwnd = hwnd; infoPtr->hwndNotify = ((LPCREATESTRUCTW)lParam)->hwndParent; @@ -2876,7 +2853,7 @@ static LRESULT TAB_Create (HWND hwnd, WPARAM wParam, LPARAM lParam) infoPtr->uVItemPadding_s = 3; infoPtr->hFont = 0; infoPtr->items = 0; - infoPtr->hcurArrow = LoadCursorA (0, (LPSTR)IDC_ARROW); + infoPtr->hcurArrow = LoadCursorW (0, (LPWSTR)IDC_ARROW); infoPtr->iSelected = -1; infoPtr->iHotTracked = -1; infoPtr->uFocus = -1; @@ -2894,13 +2871,13 @@ static LRESULT TAB_Create (HWND hwnd, WPARAM wParam, LPARAM lParam) /* The tab control always has the WS_CLIPSIBLINGS style. Even if you don't specify it in CreateWindow. This is necessary in order for paint to work correctly. This follows windows behaviour. */ - dwStyle = GetWindowLongA(hwnd, GWL_STYLE); - SetWindowLongA(hwnd, GWL_STYLE, dwStyle|WS_CLIPSIBLINGS); + dwStyle = GetWindowLongW(hwnd, GWL_STYLE); + SetWindowLongW(hwnd, GWL_STYLE, dwStyle|WS_CLIPSIBLINGS); if (dwStyle & TCS_TOOLTIPS) { /* Create tooltip control */ infoPtr->hwndToolTip = - CreateWindowExA (0, TOOLTIPS_CLASSA, NULL, 0, + CreateWindowExW (0, TOOLTIPS_CLASSW, NULL, 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwnd, 0, 0, 0); @@ -2927,7 +2904,7 @@ static LRESULT TAB_Create (HWND hwnd, WPARAM wParam, LPARAM lParam) hOldFont = SelectObject (hdc, GetStockObject (SYSTEM_FONT)); /* Use the system font to determine the initial height of a tab. */ - GetTextMetricsA(hdc, &fontMetrics); + GetTextMetricsW(hdc, &fontMetrics); /* * Make sure there is enough space for the letters + growing the @@ -2957,6 +2934,8 @@ TAB_Destroy (TAB_INFO *infoPtr) if (!infoPtr) return 0; + SetWindowLongPtrW(infoPtr->hwnd, 0, 0); + if (infoPtr->items) { for (iItem = 0; iItem < infoPtr->uNumItem; iItem++) { if (TAB_GetItem(infoPtr, iItem)->pszText) @@ -2975,7 +2954,6 @@ TAB_Destroy (TAB_INFO *infoPtr) KillTimer(infoPtr->hwnd, TAB_HOTTRACK_TIMER); Free (infoPtr); - SetWindowLongA(infoPtr->hwnd, 0, 0); return 0; } @@ -3017,11 +2995,11 @@ TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case TCM_GETITEMA: case TCM_GETITEMW: - return TAB_GetItemAW (infoPtr, (INT)wParam, (LPTCITEMA)lParam, uMsg == TCM_GETITEMW); + return TAB_GetItemT (infoPtr, (INT)wParam, (LPTCITEMW)lParam, uMsg == TCM_GETITEMW); case TCM_SETITEMA: case TCM_SETITEMW: - return TAB_SetItemAW (infoPtr, (INT)wParam, (LPTCITEMA)lParam, uMsg == TCM_SETITEMW); + return TAB_SetItemT (infoPtr, (INT)wParam, (LPTCITEMW)lParam, uMsg == TCM_SETITEMW); case TCM_DELETEITEM: return TAB_DeleteItem (infoPtr, (INT)wParam); @@ -3043,7 +3021,7 @@ TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case TCM_INSERTITEMA: case TCM_INSERTITEMW: - return TAB_InsertItemAW (infoPtr, wParam, lParam, uMsg == TCM_INSERTITEMW); + return TAB_InsertItemT (infoPtr, wParam, lParam, uMsg == TCM_INSERTITEMW); case TCM_SETITEMEXTRA: return TAB_SetItemExtra (infoPtr, (int)wParam); @@ -3171,7 +3149,7 @@ TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } -VOID +void TAB_Register (void) { WNDCLASSW wndClass; @@ -3189,7 +3167,7 @@ TAB_Register (void) } -VOID +void TAB_Unregister (void) { UnregisterClassW (WC_TABCONTROLW, NULL); -- 2.11.4.GIT