]> git.saurik.com Git - wxWidgets.git/blame - docs/doxygen/overviews/scrolling.h
Fix broken and missing DataView interface items for Phoenix
[wxWidgets.git] / docs / doxygen / overviews / scrolling.h
CommitLineData
15b6757b 1/////////////////////////////////////////////////////////////////////////////
58d0deaa 2// Name: scrolling.h
15b6757b
FM
3// Purpose: topic overview
4// Author: wxWidgets team
5// RCS-ID: $Id$
526954c5 6// Licence: wxWindows licence
15b6757b
FM
7/////////////////////////////////////////////////////////////////////////////
8
880efa2a 9/**
36c9828f 10
880efa2a 11@page overview_scrolling Scrolled Windows
58d0deaa 12
831e1028 13@tableofcontents
30738aae 14
58d0deaa
BP
15Scrollbars come in various guises in wxWidgets. All windows have the potential
16to show a vertical scrollbar and/or a horizontal scrollbar: it is a basic
17capability of a window. However, in practice, not all windows do make use of
18scrollbars, such as a single-line wxTextCtrl.
19
20Because any class derived from wxWindow may have scrollbars, there are
21functions to manipulate the scrollbars and event handlers to intercept scroll
22events. But just because a window generates a scroll event, doesn't mean that
23the window necessarily handles it and physically scrolls the window. The base
24class wxWindow in fact doesn't have any default functionality to handle scroll
25events. If you created a wxWindow object with scrollbars, and then clicked on
26the scrollbars, nothing at all would happen. This is deliberate, because the
27@e interpretation of scroll events varies from one window class to another.
28
f09b5681 29::wxScrolledWindow (formerly wxCanvas) is an example of a window that adds
58d0deaa
BP
30functionality to make scrolling really work. It assumes that scrolling happens
31in consistent units, not different-sized jumps, and that page size is
32represented by the visible portion of the window. It is suited to drawing
33applications, but perhaps not so suitable for a sophisticated editor in which
34the amount scrolled may vary according to the size of text on a given line. For
35this, you would derive from wxWindow and implement scrolling yourself. wxGrid
36is an example of a class that implements its own scrolling, largely because
37columns and rows can vary in size.
38
831e1028
BP
39@see wxScrollBar
40
58d0deaa
BP
41
42@section overview_scrolling_model The Scrollbar Model
43
44The function wxWindow::SetScrollbar gives a clue about the way a scrollbar is
45modeled. This function takes the following arguments:
46
47@beginTable
48@row2col{ @c orientation , Which scrollbar: wxVERTICAL or wxHORIZONTAL. }
49@row2col{ @c position , The position of the scrollbar in scroll units. }
50@row2col{ @c visible , The size of the visible portion of the scrollbar,
51 in scroll units. }
52@row2col{ @c range , The maximum position of the scrollbar. }
53@row2col{ @c refresh , Whether the scrollbar should be repainted. }
54@endTable
55
56@c orientation determines whether we're talking about the built-in horizontal
57or vertical scrollbar.
58
59@c position is simply the position of the 'thumb' (the bit you drag to scroll
60around). It is given in scroll units, and so is relative to the total range of
61the scrollbar.
62
63@c visible gives the number of scroll units that represents the portion of the
64window currently visible. Normally, a scrollbar is capable of indicating this
65visually by showing a different length of thumb.
66
67@c range is the maximum value of the scrollbar, where zero is the start
68position. You choose the units that suit you, so if you wanted to display text
69that has 100 lines, you would set this to 100. Note that this doesn't have to
70correspond to the number of pixels scrolled - it is up to you how you actually
71show the contents of the window.
72
73@c refresh just indicates whether the scrollbar should be repainted immediately
74or not.
75
76
77@section overview_scrolling_example An Example
78
79Let's say you wish to display 50 lines of text, using the same font. The window
80is sized so that you can only see 16 lines at a time. You would use:
81
82@code
83SetScrollbar(wxVERTICAL, 0, 16, 50);
84@endcode
85
86Note that with the window at this size, the thumb position can never go above
8750 minus 16, or 34. You can determine how many lines are currently visible by
88dividing the current view size by the character height in pixels.
89
90When defining your own scrollbar behaviour, you will always need to recalculate
91the scrollbar settings when the window size changes. You could therefore put
92your scrollbar calculations and SetScrollbar call into a function named
93AdjustScrollbars, which can be called initially and also from your wxSizeEvent
94handler function.
95
96*/