Trackbar updates

Dimitrie O. Paun dpaun at rogers.com
Wed Sep 4 12:57:14 CDT 2002


ChangeLog
  -- Unicodification (use Unicode functions & types consistently)
  -- pass infoPtr around instead of hwnd
  -- proper type-safe signatures for functions processing messages
  -- fix the types for some of the control's parameters 
  -- implement [GS]ET_UNICODEFORMAT
  -- few indentation and spacing fixes
  -- tidy up docu

Index: dlls/comctl32/trackbar.c
===================================================================
RCS file: /var/cvs/wine/dlls/comctl32/trackbar.c,v
retrieving revision 1.33
diff -u -r1.33 trackbar.c
--- dlls/comctl32/trackbar.c	16 Jul 2002 01:23:59 -0000	1.33
+++ dlls/comctl32/trackbar.c	4 Sep 2002 16:37:39 -0000
@@ -2,7 +2,8 @@
  * Trackbar control
  *
  * Copyright 1998, 1999 Eric Kohl <ekohl at abo.rhein-zeitung.de>
- * Copyright 1998,1999 Alex Priem <alexp at sci.kun.nl>
+ * Copyright 1998, 1999 Alex Priem <alexp at sci.kun.nl>
+ * Copyright 2002 Dimitrie O. Paun <dimi at bigfoot.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -19,21 +20,16 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * TODO:
- *   - Some messages.
  *   - handle dragging slider better
+ *   - increase with of the paging area
+ *   - possition buddy controls
  *   - better tic handling.
  *   - more notifications.
- *
+ *   - TBM_SETRANGEMAX & TBM_SETRANGEMIN should only change the view of the
+ *     trackbar, not the actual amount of tics in the list.
+ *   - TBM_GETTIC & TBM_GETTICPOS shouldn't rely on infoPtr->tics being sorted.
  */
 
-/* known bugs:
-
-   -TBM_SETRANGEMAX & TBM_SETRANGEMIN should only change the view of the
-   trackbar, not the actual amount of tics in the list.
-   -TBM_GETTIC & TBM_GETTICPOS shouldn't rely on infoPtr->tics being sorted.
-*/
-
-
 #include <stdio.h>
 #include <string.h>
 
@@ -45,16 +41,17 @@
 
 typedef struct
 {
-    INT  nRangeMin;
-    INT  nRangeMax;
-    INT  nLineSize;
-    INT  nPageSize;
-    INT  nSelMin;
-    INT  nSelMax;
-    INT  nPos;
+    HWND hwndSelf;
+    LONG lRangeMin;
+    LONG lRangeMax;
+    LONG lLineSize;
+    LONG lPageSize;
+    LONG lSelMin;
+    LONG lSelMax;
+    LONG lPos;
     UINT uThumbLen;
     UINT uNumTics;
-    UINT  uTicFreq;
+    UINT uTicFreq;
     HWND hwndNotify;
     HWND hwndToolTip;
     HWND hwndBuddyLA;
@@ -63,6 +60,7 @@
     COLORREF clrBk;
     INT  flags;
     BOOL bFocus;
+    BOOL bUnicode;
     RECT rcChannel;
     RECT rcSelection;
     RECT rcThumb;
@@ -73,8 +71,6 @@
 /* #define TB_REFRESH_TIMER       1 */
 /* #define TB_REFRESH_DELAY       1 */
 
-#define TRACKBAR_GetInfoPtr(wndPtr) ((TRACKBAR_INFO *)GetWindowLongA (hwnd,0))
-
 
 /* Used by TRACKBAR_Refresh to find out which parts of the control
    need to be recalculated */
@@ -95,14 +91,14 @@
 #define TIC_SELECTIONMARKMIN    0x100
 #define TIC_SELECTIONMARK       (TIC_SELECTIONMARKMAX | TIC_SELECTIONMARKMIN)
 
-static BOOL TRACKBAR_SendNotify (HWND hwnd, UINT code);
+static BOOL TRACKBAR_SendNotify (TRACKBAR_INFO *infoPtr, UINT code);
 
 static void TRACKBAR_RecalculateTics (TRACKBAR_INFO *infoPtr)
 {
     int i,tic,nrTics;
 
-    if (infoPtr->uTicFreq && infoPtr->nRangeMax >= infoPtr->nRangeMin)
-    	nrTics=(infoPtr->nRangeMax - infoPtr->nRangeMin)/infoPtr->uTicFreq;
+    if (infoPtr->uTicFreq && infoPtr->lRangeMax >= infoPtr->lRangeMin)
+    	nrTics=(infoPtr->lRangeMax - infoPtr->lRangeMin)/infoPtr->uTicFreq;
     else {
         nrTics=0;
         COMCTL32_Free (infoPtr->tics);
@@ -117,7 +113,7 @@
     	infoPtr->uNumTics=nrTics;
     }
     infoPtr->uNumTics=nrTics;
-    tic=infoPtr->nRangeMin+infoPtr->uTicFreq;
+    tic=infoPtr->lRangeMin+infoPtr->uTicFreq;
     for (i=0; i<nrTics; i++,tic+=infoPtr->uTicFreq)
         infoPtr->tics[i]=tic;
 }
@@ -126,13 +122,13 @@
 /* converts from physical (mouse) position to logical position
    (in range of trackbar) */
 
-static inline DOUBLE
+static inline double
 TRACKBAR_ConvertPlaceToPosition (TRACKBAR_INFO *infoPtr, int place,
                                  int vertical)
 {
-    double range,width,pos;
+    double range, width, pos;
 
-    range=infoPtr->nRangeMax - infoPtr->nRangeMin;
+    range=infoPtr->lRangeMax - infoPtr->lRangeMin;
     if (vertical) {
     	width=infoPtr->rcChannel.bottom - infoPtr->rcChannel.top;
         pos=(range*(place - infoPtr->rcChannel.top)) / width;
@@ -140,25 +136,25 @@
     	width=infoPtr->rcChannel.right - infoPtr->rcChannel.left;
         pos=(range*(place - infoPtr->rcChannel.left)) / width;
     }
-    pos+=infoPtr->nRangeMin;
-    if (pos > infoPtr->nRangeMax)
-        pos = infoPtr->nRangeMax;
-    else if (pos < infoPtr->nRangeMin)
-        pos = infoPtr->nRangeMin;
+    pos += infoPtr->lRangeMin;
+    if (pos > infoPtr->lRangeMax)
+        pos = infoPtr->lRangeMax;
+    else if (pos < infoPtr->lRangeMin)
+        pos = infoPtr->lRangeMin;
 
-    TRACE("%.2f\n",pos);
+    TRACE("%.2f\n", pos);
     return pos;
 }
 
 
-static VOID
-TRACKBAR_CalcChannel (HWND hwnd, TRACKBAR_INFO *infoPtr)
+static void
+TRACKBAR_CalcChannel (TRACKBAR_INFO *infoPtr)
 {
-    DWORD dwStyle = GetWindowLongA (hwnd, GWL_STYLE);
+    DWORD dwStyle = GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE);
     INT cyChannel,offsettop,offsetedge;
     RECT lpRect,*channel = & infoPtr->rcChannel;
 
-    GetClientRect (hwnd, &lpRect);
+    GetClientRect (infoPtr->hwndSelf, &lpRect);
 
     if (dwStyle & TBS_ENABLESELRANGE)
         cyChannel = ((int)(infoPtr->uThumbLen/4.5)+1)*3;
@@ -196,30 +192,30 @@
     }
 }
 
-static VOID
-TRACKBAR_CalcThumb (HWND hwnd, TRACKBAR_INFO *infoPtr)
+static void
+TRACKBAR_CalcThumb (TRACKBAR_INFO *infoPtr)
 {
     RECT *thumb;
     int range, width, thumbdepth;
-    DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE);
+    DWORD dwStyle = GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE);
 
     thumb=&infoPtr->rcThumb;
-    range=infoPtr->nRangeMax - infoPtr->nRangeMin;
+    range=infoPtr->lRangeMax - infoPtr->lRangeMin;
     thumbdepth = ((INT)((FLOAT)infoPtr->uThumbLen / 4.5) * 2) + 2;
 
-    if (!range) return; /* FIXME: may this happen? */
+    if (!range) range = 1;
 
     if (dwStyle & TBS_VERT)
     {
     	width=infoPtr->rcChannel.bottom - infoPtr->rcChannel.top;
 
         if (dwStyle & (TBS_BOTH | TBS_LEFT))
-          thumb->left = 10;
+            thumb->left = 10;
         else
-          thumb-> left =2;
+            thumb->left = 2;
         thumb->right = thumb -> left + infoPtr->uThumbLen;
         thumb->top = infoPtr->rcChannel.top +
-                     (width*(infoPtr->nPos - infoPtr->nRangeMin))/range -
+                     (width*(infoPtr->lPos - infoPtr->lRangeMin))/range -
                      thumbdepth/2;
         thumb->bottom = thumb->top + thumbdepth;
     }
@@ -228,42 +224,42 @@
     	width=infoPtr->rcChannel.right - infoPtr->rcChannel.left;
 
         thumb->left = infoPtr->rcChannel.left +
-                      (width*(infoPtr->nPos - infoPtr->nRangeMin))/range -
+                      (width*(infoPtr->lPos - infoPtr->lRangeMin))/range -
                       thumbdepth/2;
         thumb->right = thumb->left + thumbdepth;
         if (dwStyle & (TBS_BOTH | TBS_TOP))
-          thumb->top = 10;
+              thumb->top = 10;
         else
-          thumb->top = 2;
-        thumb->bottom =  thumb -> top + infoPtr->uThumbLen;
+              thumb->top = 2;
+        thumb->bottom = thumb->top + infoPtr->uThumbLen;
     }
 }
 
-static VOID
-TRACKBAR_CalcSelection (HWND hwnd, TRACKBAR_INFO *infoPtr)
+static void
+TRACKBAR_CalcSelection (TRACKBAR_INFO *infoPtr)
 {
     RECT *selection;
     int range, width;
 
     selection= & infoPtr->rcSelection;
-    range=infoPtr->nRangeMax - infoPtr->nRangeMin;
+    range=infoPtr->lRangeMax - infoPtr->lRangeMin;
     width=infoPtr->rcChannel.right - infoPtr->rcChannel.left;
 
     if (range <= 0)
         SetRectEmpty (selection);
     else
-        if (GetWindowLongA (hwnd, GWL_STYLE) & TBS_VERT) {
+        if (GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_VERT) {
             selection->left   = infoPtr->rcChannel.left +
-                (width*infoPtr->nSelMin)/range;
+                (width*infoPtr->lSelMin)/range;
             selection->right  = infoPtr->rcChannel.left +
-                (width*infoPtr->nSelMax)/range;
+                (width*infoPtr->lSelMax)/range;
             selection->top    = infoPtr->rcChannel.top + 2;
             selection->bottom = infoPtr->rcChannel.bottom - 2;
         } else {
             selection->top    = infoPtr->rcChannel.top +
-                (width*infoPtr->nSelMin)/range;
+                (width*infoPtr->lSelMin)/range;
             selection->bottom = infoPtr->rcChannel.top +
-                (width*infoPtr->nSelMax)/range;
+                (width*infoPtr->lSelMax)/range;
             selection->left   = infoPtr->rcChannel.left + 2;
             selection->right  = infoPtr->rcChannel.right - 2;
         }
@@ -273,14 +269,14 @@
 
 /* ticPos is in tic-units, not in pixels */
 
-static VOID
+static void
 TRACKBAR_DrawHorizTic (TRACKBAR_INFO *infoPtr, HDC hdc, LONG ticPos,
                        int flags, COLORREF clrTic)
 {
     RECT rcChannel=infoPtr->rcChannel;
     int x,y,width,range,side;
 
-    range=infoPtr->nRangeMax - infoPtr->nRangeMin;
+    range=infoPtr->lRangeMax - infoPtr->lRangeMin;
     width=rcChannel.right - rcChannel.left;
 
     if (flags & TBS_TOP) {
@@ -293,17 +289,17 @@
 
     if (flags & TIC_SELECTIONMARK) {
   	if (flags & TIC_SELECTIONMARKMIN)
-            x=rcChannel.left + (width*(ticPos - infoPtr->nRangeMin))/range - 1;
+            x=rcChannel.left + (width*(ticPos - infoPtr->lRangeMin))/range - 1;
 	else
-            x=rcChannel.left + (width*(ticPos - infoPtr->nRangeMin))/range + 1;
+            x=rcChannel.left + (width*(ticPos - infoPtr->lRangeMin))/range + 1;
 
    	SetPixel (hdc, x,y+6*side, clrTic);
    	SetPixel (hdc, x,y+7*side, clrTic);
 	return;
     }
 
-    if ((ticPos>infoPtr->nRangeMin) && (ticPos<infoPtr->nRangeMax)) {
-   	x=rcChannel.left + (width*(ticPos - infoPtr->nRangeMin))/range;
+    if ((ticPos>infoPtr->lRangeMin) && (ticPos<infoPtr->lRangeMax)) {
+   	x=rcChannel.left + (width*(ticPos - infoPtr->lRangeMin))/range;
    	SetPixel (hdc, x,y+5*side, clrTic);
    	SetPixel (hdc, x,y+6*side, clrTic);
    	SetPixel (hdc, x,y+7*side, clrTic);
@@ -323,14 +319,14 @@
 
 }
 
-static VOID
+static void
 TRACKBAR_DrawVertTic (TRACKBAR_INFO *infoPtr, HDC hdc, LONG ticPos,
                       int flags, COLORREF clrTic)
 {
     RECT rcChannel=infoPtr->rcChannel;
     int x,y,width,range,side;
 
-    range=infoPtr->nRangeMax - infoPtr->nRangeMin;
+    range=infoPtr->lRangeMax - infoPtr->lRangeMin;
     width=rcChannel.bottom - rcChannel.top;
 
     if (flags & TBS_TOP) {
@@ -344,17 +340,17 @@
 
     if (flags & TIC_SELECTIONMARK) {
   	if (flags & TIC_SELECTIONMARKMIN)
-            y=rcChannel.top + (width*(ticPos - infoPtr->nRangeMin))/range - 1;
+            y=rcChannel.top + (width*(ticPos - infoPtr->lRangeMin))/range - 1;
 	else
-            y=rcChannel.top + (width*(ticPos - infoPtr->nRangeMin))/range + 1;
+            y=rcChannel.top + (width*(ticPos - infoPtr->lRangeMin))/range + 1;
 
    	SetPixel (hdc, x+6*side, y, clrTic);
    	SetPixel (hdc, x+7*side, y, clrTic);
 	return;
     }
 
-    if ((ticPos>infoPtr->nRangeMin) && (ticPos<infoPtr->nRangeMax)) {
-   	y=rcChannel.top + (width*(ticPos - infoPtr->nRangeMin))/range;
+    if ((ticPos>infoPtr->lRangeMin) && (ticPos<infoPtr->lRangeMax)) {
+   	y=rcChannel.top + (width*(ticPos - infoPtr->lRangeMin))/range;
    	SetPixel (hdc, x+5*side, y, clrTic);
    	SetPixel (hdc, x+6*side, y, clrTic);
    	SetPixel (hdc, x+7*side, y, clrTic);
@@ -375,7 +371,7 @@
 }
 
 
-static VOID
+static void
 TRACKBAR_DrawTics (TRACKBAR_INFO *infoPtr, HDC hdc, LONG ticPos,
                    int flags, COLORREF clrTic)
 {
@@ -397,7 +393,7 @@
 
 }
 
-static VOID
+static void
 TRACKBAR_DrawThumb(TRACKBAR_INFO *infoPtr, HDC hdc, DWORD dwStyle)
 {
     HBRUSH oldbr,hbr = GetSysColorBrush(COLOR_BTNFACE);
@@ -533,32 +529,31 @@
       SelectObject(hdc,oldpen);
 }
 
-static VOID
-TRACKBAR_Refresh (HWND hwnd, HDC hdc)
+static void
+TRACKBAR_Refresh (TRACKBAR_INFO *infoPtr, HDC hdc)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-    DWORD dwStyle = GetWindowLongA (hwnd, GWL_STYLE);
+    DWORD dwStyle = GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE);
     RECT rcClient, rcChannel, rcSelection;
     HBRUSH hBrush;
     int i;
 
-    GetClientRect (hwnd, &rcClient);
+    GetClientRect (infoPtr->hwndSelf, &rcClient);
     hBrush = CreateSolidBrush (infoPtr->clrBk);
     FillRect (hdc, &rcClient, hBrush);
     DeleteObject (hBrush);
 
     if (infoPtr->flags & TB_DRAGPOSVALID)  {
-        infoPtr->nPos=infoPtr->dragPos;
+        infoPtr->lPos=infoPtr->dragPos;
         infoPtr->flags |= TB_THUMBPOSCHANGED;
     }
 
     if (infoPtr->flags & TB_THUMBCHANGED) {
-        TRACKBAR_CalcThumb	(hwnd, infoPtr);
+        TRACKBAR_CalcThumb	(infoPtr);
         if (infoPtr->flags & TB_THUMBSIZECHANGED)
-            TRACKBAR_CalcChannel (hwnd, infoPtr);
+            TRACKBAR_CalcChannel (infoPtr);
     }
     if (infoPtr->flags & TB_SELECTIONCHANGED)
-        TRACKBAR_CalcSelection (hwnd, infoPtr);
+        TRACKBAR_CalcSelection (infoPtr);
     infoPtr->flags &= ~ (TB_THUMBCHANGED | TB_SELECTIONCHANGED |
                          TB_DRAGPOSVALID);
 
@@ -597,9 +592,9 @@
 
         if ((dwStyle & TBS_ENABLESELRANGE) &&
             (rcSelection.left!=rcSelection.right)) {
-            TRACKBAR_DrawTics (infoPtr, hdc, infoPtr->nSelMin,
+            TRACKBAR_DrawTics (infoPtr, hdc, infoPtr->lSelMin,
                                ticFlags | TIC_SELECTIONMARKMIN, clrTic);
-            TRACKBAR_DrawTics (infoPtr, hdc, infoPtr->nSelMax,
+            TRACKBAR_DrawTics (infoPtr, hdc, infoPtr->lSelMax,
                                ticFlags | TIC_SELECTIONMARKMAX, clrTic);
         }
     }
@@ -616,15 +611,15 @@
 }
 
 
-static VOID
-TRACKBAR_AlignBuddies (HWND hwnd, TRACKBAR_INFO *infoPtr)
+static void
+TRACKBAR_AlignBuddies (TRACKBAR_INFO *infoPtr)
 {
-    DWORD dwStyle = GetWindowLongA (hwnd, GWL_STYLE);
-    HWND hwndParent = GetParent (hwnd);
+    DWORD dwStyle = GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE);
+    HWND hwndParent = GetParent (infoPtr->hwndSelf);
     RECT rcSelf, rcBuddy;
     INT x, y;
 
-    GetWindowRect (hwnd, &rcSelf);
+    GetWindowRect (infoPtr->hwndSelf, &rcSelf);
     MapWindowPoints (HWND_DESKTOP, hwndParent, (LPPOINT)&rcSelf, 2);
 
     /* align buddy left or above */
@@ -670,60 +665,46 @@
 
 
 static LRESULT
-TRACKBAR_ClearSel (HWND hwnd, WPARAM wParam, LPARAM lParam)
+TRACKBAR_ClearSel (TRACKBAR_INFO *infoPtr, BOOL fRedraw)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    infoPtr->nSelMin = 0;
-    infoPtr->nSelMax = 0;
+    infoPtr->lSelMin = 0;
+    infoPtr->lSelMax = 0;
     infoPtr->flags |= TB_SELECTIONCHANGED;
 
-    if ((BOOL)wParam)
-	InvalidateRect (hwnd, NULL, FALSE);
+    if (fRedraw)
+	InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
 
     return 0;
 }
 
 
 static LRESULT
-TRACKBAR_ClearTics (HWND hwnd, WPARAM wParam, LPARAM lParam)
+TRACKBAR_ClearTics (TRACKBAR_INFO *infoPtr, BOOL fRedraw)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
     if (infoPtr->tics) {
         COMCTL32_Free (infoPtr->tics);
         infoPtr->tics = NULL;
         infoPtr->uNumTics = 0;
     }
 
-    if (wParam)
-        InvalidateRect (hwnd, NULL, FALSE);
+    if (fRedraw)
+        InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
 
     return 0;
 }
 
 
-static LRESULT
-TRACKBAR_GetBuddy (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static HWND inline
+TRACKBAR_GetBuddy (TRACKBAR_INFO *infoPtr, BOOL fLocation)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    if (wParam)  /* buddy is left or above */
-        return (LRESULT)infoPtr->hwndBuddyLA;
-
-    /* buddy is right or below */
-    return (LRESULT) infoPtr->hwndBuddyRB;
+    return fLocation ? infoPtr->hwndBuddyLA : infoPtr->hwndBuddyRB;
 }
 
 
-static LRESULT
-TRACKBAR_GetChannelRect (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT inline
+TRACKBAR_GetChannelRect (TRACKBAR_INFO *infoPtr, LPRECT lprc)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-    LPRECT lprc = (LPRECT)lParam;
-
-    if (lprc == NULL)
-        return 0;
+    if (lprc == NULL) return 0;
 
     lprc->left   = infoPtr->rcChannel.left;
     lprc->right  = infoPtr->rcChannel.right;
@@ -734,103 +715,80 @@
 }
 
 
-static LRESULT
-TRACKBAR_GetLineSize (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LONG inline
+TRACKBAR_GetLineSize (TRACKBAR_INFO *infoPtr)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    return infoPtr->nLineSize;
+    return infoPtr->lLineSize;
 }
 
 
-static LRESULT
-TRACKBAR_GetNumTics (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LONG inline
+TRACKBAR_GetNumTics (TRACKBAR_INFO *infoPtr)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    if (GetWindowLongA (hwnd, GWL_STYLE) & TBS_NOTICKS)
+    if (GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_NOTICKS)
         return 0;
 
-    return infoPtr->uNumTics+2;
+    return infoPtr->uNumTics + 2;
 }
 
 
-static LRESULT
-TRACKBAR_GetPageSize (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LONG inline
+TRACKBAR_GetPageSize (TRACKBAR_INFO *infoPtr)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    return infoPtr->nPageSize;
+    return infoPtr->lPageSize;
 }
 
 
-static LRESULT
-TRACKBAR_GetPos (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LONG inline
+TRACKBAR_GetPos (TRACKBAR_INFO *infoPtr)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    return infoPtr->nPos;
+    return infoPtr->lPos;
 }
 
 
-static LRESULT
-TRACKBAR_GetRangeMax (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LONG inline
+TRACKBAR_GetRangeMax (TRACKBAR_INFO *infoPtr)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    return infoPtr->nRangeMax;
+    return infoPtr->lRangeMax;
 }
 
 
-static LRESULT
-TRACKBAR_GetRangeMin (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LONG inline
+TRACKBAR_GetRangeMin (TRACKBAR_INFO *infoPtr)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    return infoPtr->nRangeMin;
+    return infoPtr->lRangeMin;
 }
 
 
-static LRESULT
-TRACKBAR_GetSelEnd (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LONG inline
+TRACKBAR_GetSelEnd (TRACKBAR_INFO *infoPtr)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    return infoPtr->nSelMax;
+    return infoPtr->lSelMax;
 }
 
 
-static LRESULT
-TRACKBAR_GetSelStart (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LONG inline
+TRACKBAR_GetSelStart (TRACKBAR_INFO *infoPtr)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    return infoPtr->nSelMin;
+    return infoPtr->lSelMin;
 }
 
 
-static LRESULT
-TRACKBAR_GetThumbLength (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static UINT inline
+TRACKBAR_GetThumbLength (TRACKBAR_INFO *infoPtr)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
     return infoPtr->uThumbLen;
 }
 
-static LRESULT
-TRACKBAR_GetPTics (HWND hwnd)
+static LPLONG inline
+TRACKBAR_GetPTics (TRACKBAR_INFO *infoPtr)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    return (LRESULT) infoPtr->tics;
+    return infoPtr->tics;
 }
 
-static LRESULT
-TRACKBAR_GetThumbRect (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT inline
+TRACKBAR_GetThumbRect (TRACKBAR_INFO *infoPtr, LPRECT lprc)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-    LPRECT lprc = (LPRECT)lParam;
-
     if (lprc == NULL)
         return 0;
 
@@ -843,356 +801,329 @@
 }
 
 
-static LRESULT
-TRACKBAR_GetTic (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LONG inline
+TRACKBAR_GetTic (TRACKBAR_INFO *infoPtr, INT iTic)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-    INT iTic;
-
-    iTic=(INT) wParam;
-    if ((iTic<0) || (iTic>infoPtr->uNumTics))
+    if ((iTic < 0) || (iTic > infoPtr->uNumTics))
 	return -1;
 
-    return (LRESULT) infoPtr->tics[iTic];
+    return infoPtr->tics[iTic];
 
 }
 
 
-static LRESULT
-TRACKBAR_GetTicPos (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LONG inline
+TRACKBAR_GetTicPos (TRACKBAR_INFO *infoPtr, INT iTic)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-    INT iTic, range, width, pos;
+    LONG range, width, pos;
 
-
-    iTic=(INT ) wParam;
-    if ((iTic<0) || (iTic>infoPtr->uNumTics))
+    if ((iTic < 0) || (iTic > infoPtr->uNumTics))
 	return -1;
 
-    range=infoPtr->nRangeMax - infoPtr->nRangeMin;
-    width=infoPtr->rcChannel.right - infoPtr->rcChannel.left;
-    pos=infoPtr->rcChannel.left + (width * infoPtr->tics[iTic]) / range;
-
+    range = infoPtr->lRangeMax - infoPtr->lRangeMin;
+    width = infoPtr->rcChannel.right - infoPtr->rcChannel.left;
+    pos   = infoPtr->rcChannel.left + (width * infoPtr->tics[iTic]) / range;
 
-    return (LRESULT) pos;
+    return pos;
 }
 
 
-static LRESULT
-TRACKBAR_GetToolTips (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static HWND inline
+TRACKBAR_GetToolTips (TRACKBAR_INFO *infoPtr)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    if (GetWindowLongA (hwnd, GWL_STYLE) & TBS_TOOLTIPS)
-        return (LRESULT)infoPtr->hwndToolTip;
+    if (GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_TOOLTIPS)
+        return infoPtr->hwndToolTip;
     return 0;
 }
 
 
-/*	case TBM_GETUNICODEFORMAT: */
+static BOOL inline
+TRACKBAR_GetUnicodeFormat (TRACKBAR_INFO *infoPtr)
+{
+    return infoPtr->bUnicode;
+}
 
 
-static LRESULT
-TRACKBAR_SetBuddy (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static HWND
+TRACKBAR_SetBuddy (TRACKBAR_INFO *infoPtr, BOOL fLocation, HWND hwndBuddy)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
     HWND hwndTemp;
 
-    if (wParam) {
+    if (fLocation) {
 	/* buddy is left or above */
 	hwndTemp = infoPtr->hwndBuddyLA;
-	infoPtr->hwndBuddyLA = (HWND)lParam;
+	infoPtr->hwndBuddyLA = hwndBuddy;
 
 	FIXME("move buddy!\n");
     }
     else {
         /* buddy is right or below */
         hwndTemp = infoPtr->hwndBuddyRB;
-        infoPtr->hwndBuddyRB = (HWND)lParam;
+        infoPtr->hwndBuddyRB = hwndBuddy;
 
         FIXME("move buddy!\n");
     }
 
-    TRACKBAR_AlignBuddies (hwnd, infoPtr);
+    TRACKBAR_AlignBuddies (infoPtr);
 
-    return (LRESULT)hwndTemp;
+    return hwndTemp;
 }
 
 
-static LRESULT
-TRACKBAR_SetLineSize (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LONG inline
+TRACKBAR_SetLineSize (TRACKBAR_INFO *infoPtr, LONG lLineSize)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-    INT nTemp = infoPtr->nLineSize;
+    LONG lTemp = infoPtr->lLineSize;
 
-    infoPtr->nLineSize = (INT)lParam;
+    infoPtr->lLineSize = lLineSize;
 
-    return nTemp;
+    return lTemp;
 }
 
 
-static LRESULT
-TRACKBAR_SetPageSize (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LONG inline
+TRACKBAR_SetPageSize (TRACKBAR_INFO *infoPtr, LONG lPageSize)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-    INT nTemp = infoPtr->nPageSize;
+    LONG lTemp = infoPtr->lPageSize;
 
-    infoPtr->nPageSize = (INT)lParam;
+    infoPtr->lPageSize = lPageSize;
 
-    return nTemp;
+    return lTemp;
 }
 
 
-static LRESULT
-TRACKBAR_SetPos (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT inline
+TRACKBAR_SetPos (TRACKBAR_INFO *infoPtr, BOOL fPosition, LONG lPosition)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
+    infoPtr->lPos = lPosition;
 
-    infoPtr->nPos = (INT)lParam;
+    if (infoPtr->lPos < infoPtr->lRangeMin)
+	infoPtr->lPos = infoPtr->lRangeMin;
 
-    if (infoPtr->nPos < infoPtr->nRangeMin)
-	infoPtr->nPos = infoPtr->nRangeMin;
-
-    if (infoPtr->nPos > infoPtr->nRangeMax)
-	infoPtr->nPos = infoPtr->nRangeMax;
+    if (infoPtr->lPos > infoPtr->lRangeMax)
+	infoPtr->lPos = infoPtr->lRangeMax;
     infoPtr->flags |= TB_THUMBPOSCHANGED;
 
-    if (wParam)
-        InvalidateRect (hwnd, NULL, FALSE);
+    if (fPosition)
+        InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
 
     return 0;
 }
 
 
-static LRESULT
-TRACKBAR_SetRange (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT inline
+TRACKBAR_SetRange (TRACKBAR_INFO *infoPtr, BOOL fRedraw, LONG lRange)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-    infoPtr->nRangeMin = (INT)LOWORD(lParam);
-    infoPtr->nRangeMax = (INT)HIWORD(lParam);
+    infoPtr->lRangeMin = LOWORD(lRange);
+    infoPtr->lRangeMax = HIWORD(lRange);
 
-    if (infoPtr->nPos < infoPtr->nRangeMin) {
-        infoPtr->nPos = infoPtr->nRangeMin;
+    if (infoPtr->lPos < infoPtr->lRangeMin) {
+        infoPtr->lPos = infoPtr->lRangeMin;
         infoPtr->flags |=TB_THUMBPOSCHANGED;
     }
 
-    if (infoPtr->nPos > infoPtr->nRangeMax) {
-        infoPtr->nPos = infoPtr->nRangeMax;
+    if (infoPtr->lPos > infoPtr->lRangeMax) {
+        infoPtr->lPos = infoPtr->lRangeMax;
         infoPtr->flags |=TB_THUMBPOSCHANGED;
     }
 
-    infoPtr->nPageSize=(infoPtr->nRangeMax -  infoPtr->nRangeMin)/5;
-    if (infoPtr->nPageSize == 0)
-        infoPtr->nPageSize = 1;
+    infoPtr->lPageSize=(infoPtr->lRangeMax -  infoPtr->lRangeMin)/5;
+    if (infoPtr->lPageSize == 0)
+        infoPtr->lPageSize = 1;
     TRACKBAR_RecalculateTics (infoPtr);
 
-    if (wParam)
-        InvalidateRect (hwnd, NULL, FALSE);
+    if (fRedraw)
+        InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
 
     return 0;
 }
 
 
-static LRESULT
-TRACKBAR_SetRangeMax (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT inline
+TRACKBAR_SetRangeMax (TRACKBAR_INFO *infoPtr, BOOL fRedraw, LONG lMax)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    infoPtr->nRangeMax = (INT)lParam;
-    if (infoPtr->nPos > infoPtr->nRangeMax) {
-        infoPtr->nPos = infoPtr->nRangeMax;
+    infoPtr->lRangeMax = lMax;
+    if (infoPtr->lPos > infoPtr->lRangeMax) {
+        infoPtr->lPos = infoPtr->lRangeMax;
         infoPtr->flags |=TB_THUMBPOSCHANGED;
     }
 
-    infoPtr->nPageSize=(infoPtr->nRangeMax -  infoPtr->nRangeMin)/5;
-    if (infoPtr->nPageSize == 0)
-        infoPtr->nPageSize = 1;
+    infoPtr->lPageSize=(infoPtr->lRangeMax -  infoPtr->lRangeMin)/5;
+    if (infoPtr->lPageSize == 0)
+        infoPtr->lPageSize = 1;
     TRACKBAR_RecalculateTics (infoPtr);
 
-    if (wParam)
-        InvalidateRect (hwnd, NULL, FALSE);
+    if (fRedraw)
+        InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
 
     return 0;
 }
 
 
-static LRESULT
-TRACKBAR_SetRangeMin (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT inline
+TRACKBAR_SetRangeMin (TRACKBAR_INFO *infoPtr, BOOL fRedraw, LONG lMin)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    infoPtr->nRangeMin = (INT)lParam;
-    if (infoPtr->nPos < infoPtr->nRangeMin) {
-        infoPtr->nPos = infoPtr->nRangeMin;
+    infoPtr->lRangeMin = lMin;
+    if (infoPtr->lPos < infoPtr->lRangeMin) {
+        infoPtr->lPos = infoPtr->lRangeMin;
         infoPtr->flags |=TB_THUMBPOSCHANGED;
     }
 
-    infoPtr->nPageSize=(infoPtr->nRangeMax -  infoPtr->nRangeMin)/5;
-    if (infoPtr->nPageSize == 0)
-        infoPtr->nPageSize = 1;
-    TRACKBAR_RecalculateTics (infoPtr);
-
-    if (wParam)
-        InvalidateRect (hwnd, NULL, FALSE);
-
-    return 0;
-}
-
-
-static LRESULT
-TRACKBAR_SetTicFreq (HWND hwnd, WPARAM wParam)
-{
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    if (GetWindowLongA (hwnd, GWL_STYLE) & TBS_AUTOTICKS)
-        infoPtr->uTicFreq=(UINT) wParam;
-
+    infoPtr->lPageSize=(infoPtr->lRangeMax -  infoPtr->lRangeMin)/5;
+    if (infoPtr->lPageSize == 0)
+        infoPtr->lPageSize = 1;
     TRACKBAR_RecalculateTics (infoPtr);
 
-    InvalidateRect (hwnd, NULL, FALSE);
+    if (fRedraw)
+        InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
 
     return 0;
 }
 
 
-static LRESULT
-TRACKBAR_SetSel (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT inline
+TRACKBAR_SetSel (TRACKBAR_INFO *infoPtr, BOOL fRedraw, LONG lSel)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    infoPtr->nSelMin = (INT)LOWORD(lParam);
-    infoPtr->nSelMax = (INT)HIWORD(lParam);
+    infoPtr->lSelMin = LOWORD(lSel);
+    infoPtr->lSelMax = HIWORD(lSel);
     infoPtr->flags |=TB_SELECTIONCHANGED;
 
-    if (!GetWindowLongA (hwnd, GWL_STYLE) & TBS_ENABLESELRANGE)
+    if (!GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_ENABLESELRANGE)
         return 0;
 
-    if (infoPtr->nSelMin < infoPtr->nRangeMin)
-        infoPtr->nSelMin = infoPtr->nRangeMin;
-    if (infoPtr->nSelMax > infoPtr->nRangeMax)
-        infoPtr->nSelMax = infoPtr->nRangeMax;
-
-    if (wParam)
-        InvalidateRect (hwnd, NULL, FALSE);
+    if (infoPtr->lSelMin < infoPtr->lRangeMin)
+        infoPtr->lSelMin = infoPtr->lRangeMin;
+    if (infoPtr->lSelMax > infoPtr->lRangeMax)
+        infoPtr->lSelMax = infoPtr->lRangeMax;
 
+    if (fRedraw)
+        InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
 
     return 0;
 }
 
 
-static LRESULT
-TRACKBAR_SetSelEnd (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT inline
+TRACKBAR_SetSelEnd (TRACKBAR_INFO *infoPtr, BOOL fRedraw, LONG lEnd)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    if (!GetWindowLongA (hwnd, GWL_STYLE) & TBS_ENABLESELRANGE)
+    if (!GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_ENABLESELRANGE)
 	return 0;
 
-    infoPtr->nSelMax = (INT)lParam;
+    infoPtr->lSelMax = lEnd;
     infoPtr->flags |= TB_SELECTIONCHANGED;
 
-    if (infoPtr->nSelMax > infoPtr->nRangeMax)
-        infoPtr->nSelMax = infoPtr->nRangeMax;
+    if (infoPtr->lSelMax > infoPtr->lRangeMax)
+        infoPtr->lSelMax = infoPtr->lRangeMax;
 
-    if (wParam)
-        InvalidateRect (hwnd, NULL, FALSE);
+    if (fRedraw)
+        InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
 
     return 0;
 }
 
 
-static LRESULT
-TRACKBAR_SetSelStart (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT inline
+TRACKBAR_SetSelStart (TRACKBAR_INFO *infoPtr, BOOL fRedraw, LONG lStart)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    if (!GetWindowLongA (hwnd, GWL_STYLE) & TBS_ENABLESELRANGE)
+    if (!GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_ENABLESELRANGE)
 	return 0;
 
-    infoPtr->nSelMin = (INT)lParam;
+    infoPtr->lSelMin = lStart;
     infoPtr->flags  |=TB_SELECTIONCHANGED;
 
-    if (infoPtr->nSelMin < infoPtr->nRangeMin)
-        infoPtr->nSelMin = infoPtr->nRangeMin;
+    if (infoPtr->lSelMin < infoPtr->lRangeMin)
+        infoPtr->lSelMin = infoPtr->lRangeMin;
 
-    if (wParam)
-        InvalidateRect (hwnd, NULL, FALSE);
+    if (fRedraw)
+        InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
 
     return 0;
 }
 
 
-static LRESULT
-TRACKBAR_SetThumbLength (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT inline
+TRACKBAR_SetThumbLength (TRACKBAR_INFO *infoPtr, UINT iLength)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    if (GetWindowLongA (hwnd, GWL_STYLE) & TBS_FIXEDLENGTH)
-        infoPtr->uThumbLen = (UINT)wParam;
+    if (GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_FIXEDLENGTH)
+        infoPtr->uThumbLen = iLength;
 
     infoPtr->flags |= TB_THUMBSIZECHANGED;
 
-    InvalidateRect (hwnd, NULL, FALSE);
+    InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
 
     return 0;
 }
 
 
-static LRESULT
-TRACKBAR_SetTic (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT inline
+TRACKBAR_SetTic (TRACKBAR_INFO *infoPtr, LONG lPos)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-    INT nPos = (INT)lParam;
-
-    if ((nPos < infoPtr->nRangeMin) || (nPos> infoPtr->nRangeMax))
+    if ((lPos < infoPtr->lRangeMin) || (lPos> infoPtr->lRangeMax))
         return FALSE;
 
     infoPtr->uNumTics++;
     infoPtr->tics=COMCTL32_ReAlloc( infoPtr->tics,
                                     (infoPtr->uNumTics)*sizeof (DWORD));
-    infoPtr->tics[infoPtr->uNumTics-1]=nPos;
+    infoPtr->tics[infoPtr->uNumTics-1]=lPos;
 
-    InvalidateRect (hwnd, NULL, FALSE);
+    InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
 
     return TRUE;
 }
 
 
-static LRESULT
-TRACKBAR_SetTipSide (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT inline
+TRACKBAR_SetTicFreq (TRACKBAR_INFO *infoPtr, WORD wFreq)
+{
+    if (GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_AUTOTICKS)
+        infoPtr->uTicFreq = wFreq;
+
+    TRACKBAR_RecalculateTics (infoPtr);
+
+    InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
+
+    return 0;
+}
+
+
+static INT inline
+TRACKBAR_SetTipSide (TRACKBAR_INFO *infoPtr, INT fLocation)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
     INT fTemp = infoPtr->fLocation;
 
-    infoPtr->fLocation = (INT)wParam;
+    infoPtr->fLocation = fLocation;
 
     return fTemp;
 }
 
 
-static LRESULT
-TRACKBAR_SetToolTips (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static LRESULT inline
+TRACKBAR_SetToolTips (TRACKBAR_INFO *infoPtr, HWND hwndTT)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    infoPtr->hwndToolTip = (HWND)wParam;
+    infoPtr->hwndToolTip = hwndTT;
 
     return 0;
 }
 
 
-/*	case TBM_SETUNICODEFORMAT: */
+static BOOL inline
+TRACKBAR_SetUnicodeFormat (TRACKBAR_INFO *infoPtr, BOOL fUnicode)
+{
+    BOOL bTemp = infoPtr->bUnicode;
+
+    infoPtr->bUnicode = fUnicode;
+
+    return bTemp;
+}
 
 
 static LRESULT
-TRACKBAR_InitializeThumb (HWND hwnd)
+TRACKBAR_InitializeThumb (TRACKBAR_INFO *infoPtr)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
     infoPtr->uThumbLen = 23;   /* initial thumb length */
 
-    TRACKBAR_CalcChannel (hwnd,infoPtr);
-    TRACKBAR_CalcThumb (hwnd, infoPtr);
+    TRACKBAR_CalcChannel (infoPtr);
+    TRACKBAR_CalcThumb (infoPtr);
     infoPtr->flags &= ~TB_SELECTIONCHANGED;
 
     return 0;
@@ -1200,36 +1131,39 @@
 
 
 static LRESULT
-TRACKBAR_Create (HWND hwnd, WPARAM wParam, LPARAM lParam)
+TRACKBAR_Create (HWND hwnd, LPCREATESTRUCTW lpcs)
 {
     TRACKBAR_INFO *infoPtr;
 
     infoPtr = (TRACKBAR_INFO *)COMCTL32_Alloc (sizeof(TRACKBAR_INFO));
-    SetWindowLongA (hwnd, 0, (DWORD)infoPtr);
+    if (!infoPtr) return -1;
+    SetWindowLongW (hwnd, 0, (DWORD)infoPtr);
 
     /* set default values */
-    infoPtr->nRangeMin = 0;
-    infoPtr->nRangeMax = 100;
-    infoPtr->nLineSize = 1;
-    infoPtr->nPageSize = 20;
-    infoPtr->nSelMin   = 0;
-    infoPtr->nSelMax   = 0;
-    infoPtr->nPos      = 0;
+    infoPtr->hwndSelf  = hwnd;
+    infoPtr->lRangeMin = 0;
+    infoPtr->lRangeMax = 100;
+    infoPtr->lLineSize = 1;
+    infoPtr->lPageSize = 20;
+    infoPtr->lSelMin   = 0;
+    infoPtr->lSelMax   = 0;
+    infoPtr->lPos      = 0;
 
     infoPtr->uNumTics  = 0;    /* start and end tic are not included in count*/
     infoPtr->uTicFreq  = 1;
-    infoPtr->tics	   = NULL;
-    infoPtr->clrBk	   = GetSysColor (COLOR_BTNFACE);
-    infoPtr->hwndNotify = GetParent (hwnd);
+    infoPtr->tics      = NULL;
+    infoPtr->clrBk     = GetSysColor (COLOR_BTNFACE);
+    infoPtr->hwndNotify= GetParent (hwnd);
 
-    TRACKBAR_InitializeThumb (hwnd);
+    TRACKBAR_InitializeThumb (infoPtr);
 
     /* Create tooltip control */
-    if (GetWindowLongA (hwnd, GWL_STYLE) & TBS_TOOLTIPS) {
-        TTTOOLINFOA ti;
+    if (GetWindowLongW (hwnd, GWL_STYLE) & TBS_TOOLTIPS) {
+        TTTOOLINFOW ti;
+	WCHAR testStrW[] = { 'T', 'e', 's', 't', 0 };
 
     	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);
@@ -1239,23 +1173,23 @@
             NMTOOLTIPSCREATED nmttc;
 
             nmttc.hdr.hwndFrom = hwnd;
-            nmttc.hdr.idFrom   = GetWindowLongA (hwnd, GWL_ID);
+            nmttc.hdr.idFrom   = GetWindowLongW (hwnd, GWL_ID);
             nmttc.hdr.code = NM_TOOLTIPSCREATED;
             nmttc.hwndToolTips = infoPtr->hwndToolTip;
 
-            SendMessageA (GetParent (hwnd), WM_NOTIFY,
+            SendMessageW (GetParent (hwnd), WM_NOTIFY,
                           (WPARAM)nmttc.hdr.idFrom, (LPARAM)&nmttc);
     	}
 
-        ZeroMemory (&ti, sizeof(TTTOOLINFOA));
-        ti.cbSize   = sizeof(TTTOOLINFOA);
+        ZeroMemory (&ti, sizeof(TTTOOLINFOW));
+        ti.cbSize   = sizeof(TTTOOLINFOW);
      	ti.uFlags   = TTF_IDISHWND | TTF_TRACK;
 	ti.hwnd     = hwnd;
         ti.uId      = 0;
-        ti.lpszText = "Test"; /* LPSTR_TEXTCALLBACK */
+        ti.lpszText = testStrW; /* LPSTR_TEXTCALLBACK */
         SetRectEmpty (&ti.rect);
 
-        SendMessageA (infoPtr->hwndToolTip, TTM_ADDTOOLA, 0, (LPARAM)&ti);
+        SendMessageW (infoPtr->hwndToolTip, TTM_ADDTOOLW, 0, (LPARAM)&ti);
     }
 
     return 0;
@@ -1263,66 +1197,58 @@
 
 
 static LRESULT
-TRACKBAR_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam)
+TRACKBAR_Destroy (TRACKBAR_INFO *infoPtr)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
     /* delete tooltip control */
     if (infoPtr->hwndToolTip)
     	DestroyWindow (infoPtr->hwndToolTip);
 
     COMCTL32_Free (infoPtr);
-    SetWindowLongA (hwnd, 0, 0);
+    SetWindowLongW (infoPtr->hwndSelf, 0, 0);
     return 0;
 }
 
 
 static LRESULT
-TRACKBAR_KillFocus (HWND hwnd, WPARAM wParam, LPARAM lParam)
+TRACKBAR_KillFocus (TRACKBAR_INFO *infoPtr, HWND hwndGetFocus)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
     TRACE("\n");
 
     infoPtr->bFocus = FALSE;
     infoPtr->flags &= ~TB_DRAG_MODE;
 
-    InvalidateRect (hwnd, NULL, FALSE);
+    InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
 
     return 0;
 }
 
 
 static LRESULT
-TRACKBAR_LButtonDown (HWND hwnd, WPARAM wParam, LPARAM lParam)
+TRACKBAR_LButtonDown (TRACKBAR_INFO *infoPtr, DWORD fwKeys, INT xPos, INT yPos)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-    DWORD dwStyle = GetWindowLongA (hwnd, GWL_STYLE);
-    POINT clickPoint;
+    DWORD dwStyle = GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE);
+    POINT clickPoint = { xPos, yPos };
 
-    SetFocus (hwnd);
-
-    clickPoint.y = HIWORD(lParam);
-    clickPoint.x = LOWORD(lParam);
+    SetFocus (infoPtr->hwndSelf);
 
     if (PtInRect(&(infoPtr->rcThumb),clickPoint))
     {
         infoPtr->flags |= TB_DRAG_MODE;
         if (dwStyle & TBS_TOOLTIPS) {  /* enable tooltip */
-            TTTOOLINFOA ti;
+            TTTOOLINFOW ti;
             POINT pt;
 
             GetCursorPos (&pt);
-            SendMessageA (infoPtr->hwndToolTip, TTM_TRACKPOSITION, 0,
+            SendMessageW (infoPtr->hwndToolTip, TTM_TRACKPOSITION, 0,
                           (LPARAM)MAKELPARAM(pt.x, pt.y));
 
-            ti.cbSize   = sizeof(TTTOOLINFOA);
+            ti.cbSize   = sizeof(TTTOOLINFOW);
             ti.uId      = 0;
-            ti.hwnd     = (UINT)hwnd;
+            ti.hwnd     = infoPtr->hwndSelf;
 
             infoPtr->flags |= TB_SHOW_TOOLTIP;
-            SetCapture (hwnd);
-            SendMessageA (infoPtr->hwndToolTip, TTM_TRACKACTIVATE,
+            SetCapture (infoPtr->hwndSelf);
+            SendMessageW (infoPtr->hwndToolTip, TTM_TRACKACTIVATE,
                           (WPARAM)TRUE, (LPARAM)&ti);
         }
         return 0;
@@ -1333,32 +1259,29 @@
         DOUBLE clickPos;
 
         vertical = (dwStyle & TBS_VERT) ? 1 : 0;
-        if (vertical)
-            clickPlace=(INT)HIWORD(lParam);
-        else
-            clickPlace=(INT)LOWORD(lParam);
+	clickPlace = vertical ? yPos : xPos;
 
-       clickPos = TRACKBAR_ConvertPlaceToPosition(infoPtr, clickPlace,
+        clickPos = TRACKBAR_ConvertPlaceToPosition(infoPtr, clickPlace,
                                                    vertical);
-        prevPos = infoPtr->nPos;
+        prevPos = infoPtr->lPos;
         if (clickPos > (int)prevPos)
         {  /* similar to VK_NEXT */
-            infoPtr->nPos += infoPtr->nPageSize;
-            if (infoPtr->nPos > infoPtr->nRangeMax)
-                infoPtr->nPos = infoPtr->nRangeMax;
-            TRACKBAR_SendNotify (hwnd, TB_PAGEUP);
+            infoPtr->lPos += infoPtr->lPageSize;
+            if (infoPtr->lPos > infoPtr->lRangeMax)
+                infoPtr->lPos = infoPtr->lRangeMax;
+            TRACKBAR_SendNotify (infoPtr, TB_PAGEUP);
         }
         else
         {
-            infoPtr->nPos -= infoPtr->nPageSize;  /* similar to VK_PRIOR */
-            if (infoPtr->nPos < infoPtr->nRangeMin)
-                infoPtr->nPos = infoPtr->nRangeMin;
-            TRACKBAR_SendNotify (hwnd, TB_PAGEDOWN);
+            infoPtr->lPos -= infoPtr->lPageSize;  /* similar to VK_PRIOR */
+            if (infoPtr->lPos < infoPtr->lRangeMin)
+                infoPtr->lPos = infoPtr->lRangeMin;
+            TRACKBAR_SendNotify (infoPtr, TB_PAGEDOWN);
         }
 
-        if (prevPos!=infoPtr->nPos) {
+        if (prevPos!=infoPtr->lPos) {
             infoPtr->flags |= TB_THUMBPOSCHANGED;
-            InvalidateRect (hwnd, NULL, FALSE);
+            InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
         }
     }
 
@@ -1367,11 +1290,9 @@
 
 
 static LRESULT
-TRACKBAR_LButtonUp (HWND hwnd, WPARAM wParam, LPARAM lParam)
+TRACKBAR_LButtonUp (TRACKBAR_INFO *infoPtr, DWORD fwKeys, INT xPos, INT yPos)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    TRACKBAR_SendNotify (hwnd, TB_ENDTRACK);
+    TRACKBAR_SendNotify (infoPtr, TB_ENDTRACK);
 
     if (infoPtr->flags & TB_DRAG_MODE)
     {
@@ -1379,115 +1300,109 @@
         ReleaseCapture ();
     }
 
-    if (GetWindowLongA (hwnd, GWL_STYLE) & TBS_TOOLTIPS) {  /* disable tooltip */
-    	TTTOOLINFOA ti;
+    if (GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_TOOLTIPS) {
+    	TTTOOLINFOW ti;
 
-        ti.cbSize   = sizeof(TTTOOLINFOA);
+        ti.cbSize   = sizeof(TTTOOLINFOW);
         ti.uId      = 0;
-        ti.hwnd     = (UINT)hwnd;
+        ti.hwnd     = infoPtr->hwndSelf;
 
         infoPtr->flags &= ~TB_SHOW_TOOLTIP;
-        SendMessageA (infoPtr->hwndToolTip, TTM_TRACKACTIVATE,
+        SendMessageW (infoPtr->hwndToolTip, TTM_TRACKACTIVATE,
                       (WPARAM)FALSE, (LPARAM)&ti);
     }
 
-    InvalidateRect (hwnd, NULL, FALSE);
+    InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
 
     return 0;
 }
 
 
 static LRESULT
-TRACKBAR_CaptureChanged (HWND hwnd, WPARAM wParam, LPARAM lParam)
+TRACKBAR_CaptureChanged (TRACKBAR_INFO *infoPtr)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
     if (infoPtr->flags & TB_DRAGPOSVALID) {
-        infoPtr->nPos=infoPtr->dragPos;
-        InvalidateRect (hwnd, NULL, FALSE);
+        infoPtr->lPos=infoPtr->dragPos;
+        InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
     }
 
     infoPtr->flags &= ~ TB_DRAGPOSVALID;
 
-    TRACKBAR_SendNotify (hwnd, TB_ENDTRACK);
+    TRACKBAR_SendNotify (infoPtr, TB_ENDTRACK);
     return 0;
 }
 
 
 static LRESULT
-TRACKBAR_Paint (HWND hwnd, WPARAM wParam)
+TRACKBAR_Paint (TRACKBAR_INFO *infoPtr, HDC hdc)
 {
-    HDC hdc;
-    PAINTSTRUCT ps;
-
-    hdc = wParam==0 ? BeginPaint (hwnd, &ps) : (HDC)wParam;
-    TRACKBAR_Refresh (hwnd, hdc);
-    if(!wParam)
-	EndPaint (hwnd, &ps);
+    if (hdc) {
+	TRACKBAR_Refresh(infoPtr, hdc);
+    } else {
+	PAINTSTRUCT ps;
+    	hdc = BeginPaint (infoPtr->hwndSelf, &ps);
+    	TRACKBAR_Refresh (infoPtr, hdc);
+    	EndPaint (infoPtr->hwndSelf, &ps);
+    }
+    
     return 0;
 }
 
 
 static LRESULT
-TRACKBAR_SetFocus (HWND hwnd, WPARAM wParam, LPARAM lParam)
+TRACKBAR_SetFocus (TRACKBAR_INFO *infoPtr, HWND hwndLoseFocus)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
     TRACE("\n");
+    
     infoPtr->bFocus = TRUE;
 
-    InvalidateRect (hwnd, NULL, FALSE);
+    InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
 
     return 0;
 }
 
 
 static LRESULT
-TRACKBAR_Size (HWND hwnd, WPARAM wParam, LPARAM lParam)
+TRACKBAR_Size (TRACKBAR_INFO *infoPtr, DWORD fwSizeType, INT nWidth, INT nHeight)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-
-    TRACKBAR_CalcChannel (hwnd, infoPtr);
-    TRACKBAR_AlignBuddies (hwnd, infoPtr);
+    TRACKBAR_CalcChannel (infoPtr);
+    TRACKBAR_AlignBuddies (infoPtr);
 
     return 0;
 }
 
 
 static BOOL
-TRACKBAR_SendNotify (HWND hwnd, UINT code)
+TRACKBAR_SendNotify (TRACKBAR_INFO *infoPtr, UINT code)
 {
-    TRACE("%x\n",code);
-
-    if (GetWindowLongA (hwnd, GWL_STYLE) & TBS_VERT)
-    	return (BOOL) SendMessageA (GetParent (hwnd),
-                                    WM_VSCROLL, (WPARAM)code, (LPARAM)hwnd);
+    BOOL bVert = GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_VERT;
+    
+    TRACE("%x\n", code);
 
-    return (BOOL) SendMessageA (GetParent (hwnd),
-                                WM_HSCROLL, (WPARAM)code, (LPARAM)hwnd);
+    return (BOOL) SendMessageW (GetParent (infoPtr->hwndSelf),
+                                bVert ? WM_VSCROLL : WM_HSCROLL, 
+				(WPARAM)code, (LPARAM)infoPtr->hwndSelf);
 }
 
 
 static LRESULT
-TRACKBAR_MouseMove (HWND hwnd, WPARAM wParam, LPARAM lParam)
+TRACKBAR_MouseMove (TRACKBAR_INFO *infoPtr, DWORD fwKeys, INT xPos, INT yPos)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-    DWORD dwStyle = GetWindowLongA (hwnd, GWL_STYLE);
-    SHORT clickPlace;
+    DWORD dwStyle = GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE);
+    INT clickPlace;
     DOUBLE dragPos;
-    char buf[80];
 
-    TRACE("%x\n",wParam);
+    TRACE("(x=%d. y=%d)\n", xPos, yPos);
 
     if (dwStyle & TBS_VERT)
-        clickPlace=(SHORT)HIWORD(lParam);
+        clickPlace = yPos;
     else
-        clickPlace=(SHORT)LOWORD(lParam);
+        clickPlace = xPos;
 
     if (!(infoPtr->flags & TB_DRAG_MODE))
 	return TRUE;
 
-    SetCapture (hwnd);
+    SetCapture (infoPtr->hwndSelf);
     dragPos = TRACKBAR_ConvertPlaceToPosition (infoPtr, clickPlace,
                                                dwStyle & TBS_VERT);
     if (dragPos > ((INT)dragPos) + 0.5)
@@ -1496,103 +1411,102 @@
         infoPtr->dragPos = dragPos;
 
     infoPtr->flags |= TB_DRAGPOSVALID;
-    TRACKBAR_SendNotify (hwnd, TB_THUMBTRACK | (infoPtr->nPos<<16));
+    TRACKBAR_SendNotify (infoPtr, TB_THUMBTRACK | (infoPtr->lPos<<16));
 
     if (infoPtr->flags & TB_SHOW_TOOLTIP) {
         POINT pt;
-    	TTTOOLINFOA ti;
+    	TTTOOLINFOW ti;
+    	WCHAR buf[80], fmt[] = { '%', 'l', 'd', 0 };
 
-    	ti.cbSize = sizeof(TTTOOLINFOA);
-	ti.hwnd = hwnd;
-    	ti.uId = 0;
-        ti.hinst=0;
-        sprintf (buf,"%d",infoPtr->nPos);
-    	ti.lpszText = (LPSTR) buf;
+    	ti.cbSize = sizeof(TTTOOLINFOW);
+	ti.hwnd   = infoPtr->hwndSelf;
+    	ti.uId    = 0;
+        ti.hinst  = 0;
+        wsprintfW (buf, fmt, infoPtr->lPos);
+    	ti.lpszText = buf;
         GetCursorPos (&pt);
 
 	if (dwStyle & TBS_VERT) {
-            SendMessageA (infoPtr->hwndToolTip, TTM_TRACKPOSITION,
+            SendMessageW (infoPtr->hwndToolTip, TTM_TRACKPOSITION,
                           0, (LPARAM)MAKELPARAM(pt.x+5, pt.y+15));
         } else {
-            SendMessageA (infoPtr->hwndToolTip, TTM_TRACKPOSITION,
+            SendMessageW (infoPtr->hwndToolTip, TTM_TRACKPOSITION,
                           0, (LPARAM)MAKELPARAM(pt.x+15, pt.y+5));
         }
-    	SendMessageA (infoPtr->hwndToolTip, TTM_UPDATETIPTEXTA,
+    	SendMessageW (infoPtr->hwndToolTip, TTM_UPDATETIPTEXTW,
                       0, (LPARAM)&ti);
     }
 
-    InvalidateRect (hwnd, NULL, FALSE);
-    UpdateWindow (hwnd);
+    InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
+    UpdateWindow (infoPtr->hwndSelf);
 
     return TRUE;
 }
 
 
-static LRESULT
-TRACKBAR_KeyDown (HWND hwnd, WPARAM wParam, LPARAM lParam)
+static BOOL
+TRACKBAR_KeyDown (TRACKBAR_INFO *infoPtr, INT nVirtKey, DWORD lKeyData)
 {
-    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
-    INT pos;
+    LONG pos = infoPtr->lPos;
 
-    TRACE("%x\n",wParam);
+    TRACE("%x\n", nVirtKey);
 
-    pos=infoPtr->nPos;
-    switch (wParam) {
+    switch (nVirtKey) {
     case VK_LEFT:
     case VK_UP:
-        if (infoPtr->nPos == infoPtr->nRangeMin) return FALSE;
-        infoPtr->nPos -= infoPtr->nLineSize;
-        if (infoPtr->nPos < infoPtr->nRangeMin)
-            infoPtr->nPos = infoPtr->nRangeMin;
-        TRACKBAR_SendNotify (hwnd, TB_LINEUP);
+        if (infoPtr->lPos == infoPtr->lRangeMin) return FALSE;
+        infoPtr->lPos -= infoPtr->lLineSize;
+        if (infoPtr->lPos < infoPtr->lRangeMin)
+            infoPtr->lPos = infoPtr->lRangeMin;
+        TRACKBAR_SendNotify (infoPtr, TB_LINEUP);
         break;
     case VK_RIGHT:
     case VK_DOWN:
-        if (infoPtr->nPos == infoPtr->nRangeMax) return FALSE;
-        infoPtr->nPos += infoPtr->nLineSize;
-        if (infoPtr->nPos > infoPtr->nRangeMax)
-            infoPtr->nPos = infoPtr->nRangeMax;
-        TRACKBAR_SendNotify (hwnd, TB_LINEDOWN);
+        if (infoPtr->lPos == infoPtr->lRangeMax) return FALSE;
+        infoPtr->lPos += infoPtr->lLineSize;
+        if (infoPtr->lPos > infoPtr->lRangeMax)
+            infoPtr->lPos = infoPtr->lRangeMax;
+        TRACKBAR_SendNotify (infoPtr, TB_LINEDOWN);
         break;
     case VK_NEXT:
-        if (infoPtr->nPos == infoPtr->nRangeMax) return FALSE;
-        infoPtr->nPos += infoPtr->nPageSize;
-        if (infoPtr->nPos > infoPtr->nRangeMax)
-            infoPtr->nPos = infoPtr->nRangeMax;
-        TRACKBAR_SendNotify (hwnd, TB_PAGEUP);
+        if (infoPtr->lPos == infoPtr->lRangeMax) return FALSE;
+        infoPtr->lPos += infoPtr->lPageSize;
+        if (infoPtr->lPos > infoPtr->lRangeMax)
+            infoPtr->lPos = infoPtr->lRangeMax;
+        TRACKBAR_SendNotify (infoPtr, TB_PAGEUP);
         break;
     case VK_PRIOR:
-        if (infoPtr->nPos == infoPtr->nRangeMin) return FALSE;
-        infoPtr->nPos -= infoPtr->nPageSize;
-        if (infoPtr->nPos < infoPtr->nRangeMin)
-            infoPtr->nPos = infoPtr->nRangeMin;
-        TRACKBAR_SendNotify (hwnd, TB_PAGEDOWN);
+        if (infoPtr->lPos == infoPtr->lRangeMin) return FALSE;
+        infoPtr->lPos -= infoPtr->lPageSize;
+        if (infoPtr->lPos < infoPtr->lRangeMin)
+            infoPtr->lPos = infoPtr->lRangeMin;
+        TRACKBAR_SendNotify (infoPtr, TB_PAGEDOWN);
         break;
     case VK_HOME:
-        if (infoPtr->nPos == infoPtr->nRangeMin) return FALSE;
-        infoPtr->nPos = infoPtr->nRangeMin;
-        TRACKBAR_SendNotify (hwnd, TB_TOP);
+        if (infoPtr->lPos == infoPtr->lRangeMin) return FALSE;
+        infoPtr->lPos = infoPtr->lRangeMin;
+        TRACKBAR_SendNotify (infoPtr, TB_TOP);
         break;
     case VK_END:
-        if (infoPtr->nPos == infoPtr->nRangeMax) return FALSE;
-        infoPtr->nPos = infoPtr->nRangeMax;
-        TRACKBAR_SendNotify (hwnd, TB_BOTTOM);
+        if (infoPtr->lPos == infoPtr->lRangeMax) return FALSE;
+        infoPtr->lPos = infoPtr->lRangeMax;
+        TRACKBAR_SendNotify (infoPtr, TB_BOTTOM);
         break;
     }
 
-    if (pos!=infoPtr->nPos) {
+    if (pos != infoPtr->lPos) {
 	infoPtr->flags |=TB_THUMBPOSCHANGED;
-	InvalidateRect (hwnd, NULL, FALSE);
+	InvalidateRect (infoPtr->hwndSelf, NULL, FALSE);
     }
 
     return TRUE;
 }
 
 
-static LRESULT
-TRACKBAR_KeyUp (HWND hwnd, WPARAM wParam)
+static BOOL inline
+TRACKBAR_KeyUp (TRACKBAR_INFO *infoPtr, INT nVirtKey, DWORD lKeyData)
 {
-    switch (wParam) {
+    switch (nVirtKey) {
     case VK_LEFT:
     case VK_UP:
     case VK_RIGHT:
@@ -1601,7 +1515,7 @@
     case VK_PRIOR:
     case VK_HOME:
     case VK_END:
-        TRACKBAR_SendNotify (hwnd, TB_ENDTRACK);
+        TRACKBAR_SendNotify (infoPtr, TB_ENDTRACK);
     }
     return TRUE;
 }
@@ -1610,123 +1524,129 @@
 static LRESULT WINAPI
 TRACKBAR_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
+    TRACKBAR_INFO *infoPtr = (TRACKBAR_INFO *)GetWindowLongW (hwnd, 0);
+    
     TRACE("hwnd=%x msg=%x wparam=%x lparam=%lx\n", hwnd, uMsg, wParam, lParam);
-    if (!TRACKBAR_GetInfoPtr (hwnd) && (uMsg != WM_CREATE))
-        return DefWindowProcA (hwnd, uMsg, wParam, lParam);
+    
+    if (!infoPtr && (uMsg != WM_CREATE))
+        return DefWindowProcW (hwnd, uMsg, wParam, lParam);
+    
     switch (uMsg)
     {
     case TBM_CLEARSEL:
-        return TRACKBAR_ClearSel (hwnd, wParam, lParam);
+        return TRACKBAR_ClearSel (infoPtr, (BOOL)wParam);
 
     case TBM_CLEARTICS:
-        return TRACKBAR_ClearTics (hwnd, wParam, lParam);
+        return TRACKBAR_ClearTics (infoPtr, (BOOL)wParam);
 
     case TBM_GETBUDDY:
-        return TRACKBAR_GetBuddy (hwnd, wParam, lParam);
+        return (LRESULT)TRACKBAR_GetBuddy (infoPtr, (BOOL)wParam);
 
     case TBM_GETCHANNELRECT:
-        return TRACKBAR_GetChannelRect (hwnd, wParam, lParam);
+        return TRACKBAR_GetChannelRect (infoPtr, (LPRECT)lParam);
 
     case TBM_GETLINESIZE:
-        return TRACKBAR_GetLineSize (hwnd, wParam, lParam);
+        return TRACKBAR_GetLineSize (infoPtr);
 
     case TBM_GETNUMTICS:
-        return TRACKBAR_GetNumTics (hwnd, wParam, lParam);
+        return TRACKBAR_GetNumTics (infoPtr);
 
     case TBM_GETPAGESIZE:
-        return TRACKBAR_GetPageSize (hwnd, wParam, lParam);
+        return TRACKBAR_GetPageSize (infoPtr);
 
     case TBM_GETPOS:
-        return TRACKBAR_GetPos (hwnd, wParam, lParam);
+        return TRACKBAR_GetPos (infoPtr);
 
     case TBM_GETPTICS:
-        return TRACKBAR_GetPTics (hwnd);
+        return (LRESULT)TRACKBAR_GetPTics (infoPtr);
 
     case TBM_GETRANGEMAX:
-        return TRACKBAR_GetRangeMax (hwnd, wParam, lParam);
+        return TRACKBAR_GetRangeMax (infoPtr);
 
     case TBM_GETRANGEMIN:
-        return TRACKBAR_GetRangeMin (hwnd, wParam, lParam);
+        return TRACKBAR_GetRangeMin (infoPtr);
 
     case TBM_GETSELEND:
-        return TRACKBAR_GetSelEnd (hwnd, wParam, lParam);
+        return TRACKBAR_GetSelEnd (infoPtr);
 
     case TBM_GETSELSTART:
-        return TRACKBAR_GetSelStart (hwnd, wParam, lParam);
+        return TRACKBAR_GetSelStart (infoPtr);
 
     case TBM_GETTHUMBLENGTH:
-        return TRACKBAR_GetThumbLength (hwnd, wParam, lParam);
+        return TRACKBAR_GetThumbLength (infoPtr);
 
     case TBM_GETTHUMBRECT:
-        return TRACKBAR_GetThumbRect (hwnd, wParam, lParam);
+        return TRACKBAR_GetThumbRect (infoPtr, (LPRECT)lParam);
 
     case TBM_GETTIC:
-        return TRACKBAR_GetTic (hwnd, wParam, lParam);
+        return TRACKBAR_GetTic (infoPtr, (INT)wParam);
 
     case TBM_GETTICPOS:
-        return TRACKBAR_GetTicPos (hwnd, wParam, lParam);
+        return TRACKBAR_GetTicPos (infoPtr, (INT)wParam);
 
     case TBM_GETTOOLTIPS:
-        return TRACKBAR_GetToolTips (hwnd, wParam, lParam);
+        return (LRESULT)TRACKBAR_GetToolTips (infoPtr);
 
-/*	case TBM_GETUNICODEFORMAT: */
+    case TBM_GETUNICODEFORMAT:
+	return TRACKBAR_GetUnicodeFormat(infoPtr);
 
     case TBM_SETBUDDY:
-        return TRACKBAR_SetBuddy (hwnd, wParam, lParam);
+        return (LRESULT) TRACKBAR_SetBuddy(infoPtr, (BOOL)wParam, (HWND)lParam);
 
     case TBM_SETLINESIZE:
-        return TRACKBAR_SetLineSize (hwnd, wParam, lParam);
+        return TRACKBAR_SetLineSize (infoPtr, (LONG)lParam);
 
     case TBM_SETPAGESIZE:
-        return TRACKBAR_SetPageSize (hwnd, wParam, lParam);
+        return TRACKBAR_SetPageSize (infoPtr, (LONG)lParam);
 
     case TBM_SETPOS:
-        return TRACKBAR_SetPos (hwnd, wParam, lParam);
+        return TRACKBAR_SetPos (infoPtr, (BOOL)wParam, (LONG)lParam);
 
     case TBM_SETRANGE:
-        return TRACKBAR_SetRange (hwnd, wParam, lParam);
+        return TRACKBAR_SetRange (infoPtr, (BOOL)wParam, (LONG)lParam);
 
     case TBM_SETRANGEMAX:
-        return TRACKBAR_SetRangeMax (hwnd, wParam, lParam);
+        return TRACKBAR_SetRangeMax (infoPtr, (BOOL)wParam, (LONG)lParam);
 
     case TBM_SETRANGEMIN:
-        return TRACKBAR_SetRangeMin (hwnd, wParam, lParam);
+        return TRACKBAR_SetRangeMin (infoPtr, (BOOL)wParam, (LONG)lParam);
 
     case TBM_SETSEL:
-        return TRACKBAR_SetSel (hwnd, wParam, lParam);
+        return TRACKBAR_SetSel (infoPtr, (BOOL)wParam, (LONG)lParam);
 
     case TBM_SETSELEND:
-        return TRACKBAR_SetSelEnd (hwnd, wParam, lParam);
+        return TRACKBAR_SetSelEnd (infoPtr, (BOOL)wParam, (LONG)lParam);
 
     case TBM_SETSELSTART:
-        return TRACKBAR_SetSelStart (hwnd, wParam, lParam);
+        return TRACKBAR_SetSelStart (infoPtr, (BOOL)wParam, (LONG)lParam);
 
     case TBM_SETTHUMBLENGTH:
-        return TRACKBAR_SetThumbLength (hwnd, wParam, lParam);
+        return TRACKBAR_SetThumbLength (infoPtr, (UINT)wParam);
 
     case TBM_SETTIC:
-        return TRACKBAR_SetTic (hwnd, wParam, lParam);
+        return TRACKBAR_SetTic (infoPtr, (LONG)lParam);
 
     case TBM_SETTICFREQ:
-        return TRACKBAR_SetTicFreq (hwnd, wParam);
+        return TRACKBAR_SetTicFreq (infoPtr, (WORD)wParam);
 
     case TBM_SETTIPSIDE:
-        return TRACKBAR_SetTipSide (hwnd, wParam, lParam);
+        return TRACKBAR_SetTipSide (infoPtr, (INT)wParam);
 
     case TBM_SETTOOLTIPS:
-        return TRACKBAR_SetToolTips (hwnd, wParam, lParam);
+        return TRACKBAR_SetToolTips (infoPtr, (HWND)wParam);
 
-/*	case TBM_SETUNICODEFORMAT: */
+    case TBM_SETUNICODEFORMAT:
+	return TRACKBAR_SetUnicodeFormat (infoPtr, (BOOL)wParam);
 
 
     case WM_CAPTURECHANGED:
-        return TRACKBAR_CaptureChanged (hwnd, wParam, lParam);
+        return TRACKBAR_CaptureChanged (infoPtr);
 
     case WM_CREATE:
-        return TRACKBAR_Create (hwnd, wParam, lParam);
+        return TRACKBAR_Create (hwnd, (LPCREATESTRUCTW)lParam);
 
     case WM_DESTROY:
-        return TRACKBAR_Destroy (hwnd, wParam, lParam);
+        return TRACKBAR_Destroy (infoPtr);
 
 /*	case WM_ENABLE: */
 
@@ -1737,65 +1657,64 @@
         return DLGC_WANTARROWS;
 
     case WM_KEYDOWN:
-        return TRACKBAR_KeyDown (hwnd, wParam, lParam);
+        return TRACKBAR_KeyDown (infoPtr, (INT)wParam, (DWORD)lParam);
 
     case WM_KEYUP:
-        return TRACKBAR_KeyUp (hwnd, wParam);
+        return TRACKBAR_KeyUp (infoPtr, (INT)wParam, (DWORD)lParam);
 
     case WM_KILLFOCUS:
-        return TRACKBAR_KillFocus (hwnd, wParam, lParam);
+        return TRACKBAR_KillFocus (infoPtr, (HWND)wParam);
 
     case WM_LBUTTONDOWN:
-        return TRACKBAR_LButtonDown (hwnd, wParam, lParam);
+        return TRACKBAR_LButtonDown (infoPtr, wParam, LOWORD(lParam), HIWORD(lParam));
 
     case WM_LBUTTONUP:
-        return TRACKBAR_LButtonUp (hwnd, wParam, lParam);
+        return TRACKBAR_LButtonUp (infoPtr, wParam, LOWORD(lParam), HIWORD(lParam));
 
     case WM_MOUSEMOVE:
-        return TRACKBAR_MouseMove (hwnd, wParam, lParam);
+        return TRACKBAR_MouseMove (infoPtr, wParam, LOWORD(lParam), HIWORD(lParam));
 
     case WM_PAINT:
-        return TRACKBAR_Paint (hwnd, wParam);
+        return TRACKBAR_Paint (infoPtr, (HDC)wParam);
 
     case WM_SETFOCUS:
-        return TRACKBAR_SetFocus (hwnd, wParam, lParam);
+        return TRACKBAR_SetFocus (infoPtr, (HWND)wParam);
 
     case WM_SIZE:
-        return TRACKBAR_Size (hwnd, wParam, lParam);
+        return TRACKBAR_Size (infoPtr, wParam, LOWORD(lParam), HIWORD(lParam));
 
+/*	case WM_TIMER: */
+	
     case WM_WININICHANGE:
-        return TRACKBAR_InitializeThumb (hwnd);
+        return TRACKBAR_InitializeThumb (infoPtr);
 
     default:
         if ((uMsg >= WM_USER) && (uMsg < WM_APP))
-            ERR("unknown msg %04x wp=%08x lp=%08lx\n",
-                 uMsg, wParam, lParam);
-        return DefWindowProcA (hwnd, uMsg, wParam, lParam);
+            ERR("unknown msg %04x wp=%08x lp=%08lx\n", uMsg, wParam, lParam);
+        return DefWindowProcW (hwnd, uMsg, wParam, lParam);
     }
     return 0;
 }
 
 
-VOID
-TRACKBAR_Register (void)
+void TRACKBAR_Register (void)
 {
-    WNDCLASSA wndClass;
+    WNDCLASSW wndClass;
 
-    ZeroMemory (&wndClass, sizeof(WNDCLASSA));
+    ZeroMemory (&wndClass, sizeof(WNDCLASSW));
     wndClass.style         = CS_GLOBALCLASS;
     wndClass.lpfnWndProc   = (WNDPROC)TRACKBAR_WindowProc;
     wndClass.cbClsExtra    = 0;
     wndClass.cbWndExtra    = sizeof(TRACKBAR_INFO *);
-    wndClass.hCursor       = LoadCursorA (0, IDC_ARROWA);
+    wndClass.hCursor       = LoadCursorW (0, IDC_ARROWW);
     wndClass.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1);
-    wndClass.lpszClassName = TRACKBAR_CLASSA;
+    wndClass.lpszClassName = TRACKBAR_CLASSW;
 
-    RegisterClassA (&wndClass);
+    RegisterClassW (&wndClass);
 }
 
 
-VOID
-TRACKBAR_Unregister (void)
+void TRACKBAR_Unregister (void)
 {
-    UnregisterClassA (TRACKBAR_CLASSA, (HINSTANCE)NULL);
+    UnregisterClassW (TRACKBAR_CLASSW, (HINSTANCE)NULL);
 }




More information about the wine-patches mailing list