Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
220
Src/Plugins/General/gen_ml/scrollwnd.h
Normal file
220
Src/Plugins/General/gen_ml/scrollwnd.h
Normal file
|
@ -0,0 +1,220 @@
|
|||
#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
|
Loading…
Add table
Add a link
Reference in a new issue