/*
   TrackBar

   All the useful information for a trackbar.
*/

typedef struct {
    HWND    hwnd;           // our window handle
    HDC     hdc;            // current DC

    LONG    lLogMin;        // Logical minimum
    LONG    lLogMax;        // Logical maximum
    LONG    lLogPos;        // Logical position

    LONG    lSelStart;      // Logical selection start
    LONG    lSelEnd;        // Logical selection end

    WORD    wThumbWidth;    // Width of the thumb
    WORD    wThumbHeight;   // Height of the thumb

    int     iSizePhys;      // Size of where thumb lives
    RECT    rc;             // track bar rect.

    RECT    Thumb;          // Rectangle we current thumb
    DWORD   dwDragPos;      // Logical position of mouse while dragging.

    WORD    Flags;          // Flags for our window
    int     Timer;          // Our timer.
    WORD    Cmd;            // The command we're repeating.

    int     nTics;          // number of ticks.
    PDWORD  pTics;          // the tick marks.

} TrackBar, *PTrackBar;

// Trackbar flags

#define TBF_NOTHUMB     0x0001  // No thumb because not wide enough.
#define TBF_SELECTION   0x0002  // a selection has been established (draw the range)

/*
   useful constants.
*/

#define REPEATTIME      500     // mouse auto repeat 1/2 of a second
#define TIMER_ID        1

#define GWL_TRACKMEM    0                  /* handle to track bar memory */
#define EXTRA_TB_BYTES  sizeof(PTrackBar)  /* Total extra bytes.         */

/*
   Useful defines.
*/

#define TrackBarCreate(hwnd)    SetWindowLong(hwnd, GWL_TRACKMEM, (LONG)LocalAlloc (LPTR, sizeof(TrackBar)))
#define TrackBarDestroy(hwnd)   LocalFree((HLOCAL)GetWindowLong (hwnd, GWL_TRACKMEM))
#define TrackBarLock(hwnd)      (PTrackBar)GetWindowLong(hwnd, GWL_TRACKMEM)

/*
   Function Prototypes
*/

void   NEAR PASCAL DoTrack(PTrackBar, int, DWORD);
WORD   NEAR PASCAL WTrackType(PTrackBar, LONG);
void   NEAR PASCAL TBTrackInit(PTrackBar, LONG);
void   NEAR PASCAL TBTrackEnd(PTrackBar, LONG);
void   NEAR PASCAL TBTrack(PTrackBar, LONG);
void   NEAR PASCAL DrawThumb(PTrackBar);
HBRUSH NEAR PASCAL SelectColorObjects(PTrackBar, BOOL);
void   NEAR PASCAL SetTBCaretPos(PTrackBar);

extern DWORD FAR PASCAL muldiv32(DWORD, DWORD, DWORD);