123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- #ifndef _SCROLLWND_H
- #define _SCROLLWND_H
- /* minimum size of scrollbar before inserted buttons are
- hidden to make room when the window is sized too small */
- #define MIN_COOLSB_SIZE 24
- /* min size of scrollbar when resizing a button, before the
- resize is stopped because the scrollbar has gotten too small */
- #define MINSCROLLSIZE 50
- /* a normal scrollbar "snaps" its scroll-thumb back into position if
- you move the mouse too far away from the window, whilst you are
- dragging the thumb, that is. #undeffing this results in the thumb
- never snapping back into position, no matter how far away you move
- the mouse */
- #define SNAP_THUMB_BACK
- /* distance (in pixels) the mouse must move away from the thumb
- during tracking to cause the thumb bar to snap back to its
- starting place. Has no effect unless SNAP_THUMB_BACK is defined */
- #define THUMBTRACK_SNAPDIST 128
- #include <windows.h>
- // To complement the exisiting SB_HORZ, SB_VERT, SB_BOTH
- // scrollbar identifiers
- #define COOLSB_NONE (-1)
- #define SB_INSBUT (-2)
- //
- // Arrow size defines
- //
- #define SYSTEM_METRIC (-1)
- //
- // general scrollbar styles
- //
- // use the standard ESB_DISABLE_xxx flags to represent the
- // enabled / disabled states. (defined in winuser.h)
- //
- #define CSBS_THUMBALWAYS 4
- #define CSBS_VISIBLE 8
- //cool scrollbar styles for Flat scrollbars
- #define CSBS_NORMAL 0
- #define CSBS_FLAT 1
- #define CSBS_HOTTRACKED 2
- //
- // Button mask flags for indicating which members of SCROLLBUT
- // to use during a button insertion / modification
- //
- #define SBBF_TYPE 0x0001
- #define SBBF_ID 0x0002
- #define SBBF_PLACEMENT 0x0004
- #define SBBF_SIZE 0x0008
- #define SBBF_BITMAP 0x0010
- #define SBBF_ENHMETAFILE 0x0020
- //#define SBBF_OWNERDRAW 0x0040 //unused at present
- #define SBBF_CURSOR 0x0080
- #define SBBF_BUTMINMAX 0x0100
- #define SBBF_STATE 0x0200
- //button styles (states)
- #define SBBS_NORMAL 0
- #define SBBS_PUSHED 1
- #define SBBS_CHECKED SBBS_PUSHED
- //
- // scrollbar button types
- //
- #define SBBT_PUSHBUTTON 1 //standard push button
- #define SBBT_TOGGLEBUTTON 2 //toggle button
- #define SBBT_FIXED 3 //fixed button (non-clickable)
- #define SBBT_FLAT 4 //blank area (flat, with border)
- #define SBBT_BLANK 5 //blank area (flat, no border)
- #define SBBT_DARK 6 //dark blank area (flat)
- #define SBBT_OWNERDRAW 7 //user draws the button via a WM_NOTIFY
- #define SBBT_MASK 0x1f //mask off low 5 bits
- //button type modifiers
- #define SBBM_RECESSED 0x0020 //recessed when clicked (like Word 97)
- #define SBBM_LEFTARROW 0x0040
- #define SBBM_RIGHTARROW 0x0080
- #define SBBM_UPARROW 0x0100
- #define SBBM_DOWNARROW 0x0200
- #define SBBM_RESIZABLE 0x0400
- #define SBBM_TYPE2 0x0800
- #define SBBM_TYPE3 0x1000
- #define SBBM_TOOLTIPS 0x2000 //currently unused (define COOLSB_TOOLTIPS in userdefs.h)
- //button placement flags
- #define SBBP_LEFT 1
- #define SBBP_RIGHT 2
- #define SBBP_TOP 1 //3
- #define SBBP_BOTTOM 2 //4
- //
- // Button command notification codes
- // for sending with a WM_COMMAND message
- //
- #define CSBN_BASE 0
- #define CSBN_CLICKED (1 + CSBN_BASE)
- #define CSBN_HILIGHT (2 + CSBN_BASE)
- //
- // Minimum size in pixels of a scrollbar thumb
- //
- #define MINTHUMBSIZE_NT4 9
- #define MINTHUMBSIZE_2000 7
- //define some more hittest values for our cool-scrollbar
- #define HTSCROLL_LEFT (SB_LINELEFT)
- #define HTSCROLL_RIGHT (SB_LINERIGHT)
- #define HTSCROLL_UP (SB_LINEUP)
- #define HTSCROLL_DOWN (SB_LINEDOWN)
- #define HTSCROLL_THUMB (SB_THUMBTRACK)
- #define HTSCROLL_PAGEGUP (SB_PAGEUP)
- #define HTSCROLL_PAGEGDOWN (SB_PAGEDOWN)
- #define HTSCROLL_PAGELEFT (SB_PAGELEFT)
- #define HTSCROLL_PAGERIGHT (SB_PAGERIGHT)
- #define HTSCROLL_NONE (-1)
- #define HTSCROLL_NORMAL (-1)
- #define HTSCROLL_INSERTED (128)
- #define HTSCROLL_PRE (32 | HTSCROLL_INSERTED)
- #define HTSCROLL_POST (64 | HTSCROLL_INSERTED)
- //
- // SCROLLBAR datatype. There are two of these structures per window
- //
- #define SCROLLBAR_LISTVIEW 1 // scrollbar is for a listview
- typedef struct
- {
- UINT fScrollFlags; //flags
- BOOL fScrollVisible; //if this scrollbar visible?
- SCROLLINFO scrollInfo; //positional data (range, position, page size etc)
-
- int nArrowLength; //perpendicular size (height of a horizontal, width of a vertical)
- int nArrowWidth; //parallel size (width of horz, height of vert)
- //data for inserted buttons
- int nButSizeBefore; //size to the left / above the bar
- int nButSizeAfter; //size to the right / below the bar
- BOOL fButVisibleBefore; //if the buttons to the left are visible
- BOOL fButVisibleAfter; //if the buttons to the right are visible
- int nBarType; //SB_HORZ / SB_VERT
- UINT fFlatScrollbar; //do we display flat scrollbars?
- int nMinThumbSize;
- int flags;
- } SCROLLBAR;
- //
- // PRIVATE INTERNAL FUNCTIONS
- //
- #define COOLSB_TIMERID1 65533 //initial timer
- #define COOLSB_TIMERID2 65534 //scroll message timer
- #define COOLSB_TIMERID3 -14 //mouse hover timer
- #define COOLSB_TIMERINTERVAL1 300
- #define COOLSB_TIMERINTERVAL2 55
- #define COOLSB_TIMERINTERVAL3 20 //mouse hover time
- //
- // direction: 0 - same axis as scrollbar (i.e. width of a horizontal bar)
- // 1 - perpendicular dimesion (i.e. height of a horizontal bar)
- //
- #define SM_CXVERTSB 1
- #define SM_CYVERTSB 0
- #define SM_CXHORZSB 0
- #define SM_CYHORZSB 1
- #define SM_SCROLL_WIDTH 1
- #define SM_SCROLL_LENGTH 0
- class ScrollWnd {
- public:
- ScrollWnd(HWND hwnd, int flags=0);
- ~ScrollWnd();
- void update();
-
- HWND m_hwnd;
- UINT bars; //which of the scrollbars do we handle? SB_VERT / SB_HORZ / SB_BOTH
- WNDPROC oldproc; //old window procedure to call for every message
- BOOL fWndUnicode;
- SCROLLBAR sbarHorz; //one scrollbar structure each for
- SCROLLBAR sbarVert; //the horizontal and vertical scrollbars
- BOOL fThumbTracking; // are we currently thumb-tracking??
- BOOL fLeftScrollbar; // support the WS_EX_LEFTSCROLLBAR style
- //size of the window borders
- int cxLeftEdge, cxRightEdge;
- int cyTopEdge, cyBottomEdge;
- // To prevent calling original WindowProc in response
- // to our own temporary style change (fixes TreeView problem)
- BOOL bPreventStyleChange;
- void updatesb(int fnBar, BOOL *fRecalcFrame);
- void disableHorzScroll();
- //int setScrollInfo(int fnBar, LPSCROLLINFO lpsi, BOOL fRedraw);
- int m_disable_hscroll;
- int m_xp_theme_disabled;
- };
- #endif
|