]>
Commit | Line | Data |
---|---|---|
1 | \section{\class{wxDragImage}}\label{wxdragimage} | |
2 | ||
3 | This class is used when you wish to drag an object on the screen, | |
4 | and a simple cursor is not enough. | |
5 | ||
6 | On Windows, the WIN32 API is used to do achieve smooth dragging. On other platforms, | |
7 | wxGenericDragImage is used. Applications may also prefer to use | |
8 | wxGenericDragImage on Windows, too. | |
9 | ||
10 | \pythonnote{wxPython uses wxGenericDragImage on all platforms, but | |
11 | uses the wxDragImage name.} | |
12 | ||
13 | To use this class, when you wish to start dragging an image, create a wxDragImage | |
14 | object and store it somewhere you can access it as the drag progresses. | |
15 | Call BeginDrag to start, and EndDrag to stop the drag. To move the image, | |
16 | initially call Show and then Move. If you wish to update the screen contents | |
17 | during the drag (for example, highlight an item as in the dragimag sample), first call Hide, | |
18 | update the screen, call Move, and then call Show. | |
19 | ||
20 | You can drag within one window, or you can use full-screen dragging | |
21 | either across the whole screen, or just restricted to one area | |
22 | of the screen to save resources. If you want the user to drag between | |
23 | two windows, then you will need to use full-screen dragging. | |
24 | ||
25 | If you wish to draw the image yourself, use wxGenericDragImage and | |
26 | override \helpref{wxDragImage::DoDrawImage}{wxdragimagedodrawimage} and | |
27 | \helpref{wxDragImage::GetImageRect}{wxdragimagegetimagerect}. | |
28 | ||
29 | Please see {\tt samples/dragimag} for an example. | |
30 | ||
31 | %\wxheading{Notes} | |
32 | % | |
33 | %Using the native Windows implementation, you must supply an image with a mask, or | |
34 | %the image will not show when dragged. It is not clear if this is a bug | |
35 | %in Windows or in the wxDragImage implementation. You can add a mask | |
36 | %with a call to wxImage::SetMaskColour, passing RGB values not likely | |
37 | %to be in the image. [CURED by creating the ImageList with ILC_MASK] | |
38 | ||
39 | \wxheading{Derived from} | |
40 | ||
41 | \helpref{wxObject}{wxobject} | |
42 | ||
43 | \wxheading{Include files} | |
44 | ||
45 | <wx/dragimag.h>\\ | |
46 | <wx/generic/dragimgg.h> | |
47 | ||
48 | \latexignore{\rtfignore{\wxheading{Members}}} | |
49 | ||
50 | \membersection{wxDragImage::wxDragImage}\label{wxdragimageconstr} | |
51 | ||
52 | \func{}{wxDragImage}{\void} | |
53 | ||
54 | Default constructor. | |
55 | ||
56 | \func{}{wxDragImage}{\param{const wxBitmap\& }{image}, \param{const wxCursor\& }{cursor = wxNullCursor}, | |
57 | \param{const wxPoint\& }{cursorHotspot = wxPoint(0, 0)}} | |
58 | ||
59 | Constructs a drag image from a bitmap and optional cursor. | |
60 | ||
61 | \func{}{wxDragImage}{\param{const wxIcon\& }{image}, \param{const wxCursor\& }{cursor = wxNullCursor}, | |
62 | \param{const wxPoint\& }{cursorHotspot = wxPoint(0, 0)}} | |
63 | ||
64 | Constructs a drag image from an icon and optional cursor. | |
65 | ||
66 | \pythonnote{This constructor is called wxDragIcon in wxPython.} | |
67 | ||
68 | \func{}{wxDragImage}{\param{const wxString\& }{text}, \param{const wxCursor\& }{cursor = wxNullCursor}, | |
69 | \param{const wxPoint\& }{cursorHotspot = wxPoint(0, 0)}} | |
70 | ||
71 | Constructs a drag image from a text string and optional cursor. | |
72 | ||
73 | \pythonnote{This constructor is called wxDragString in wxPython.} | |
74 | ||
75 | \func{}{wxDragImage}{\param{const wxTreeCtrl\& }{treeCtrl}, \param{wxTreeItemId\& }{id}} | |
76 | ||
77 | Constructs a drag image from the text in the given tree control item, and optional cursor. | |
78 | ||
79 | \pythonnote{This constructor is called wxDragTreeItem in wxPython.} | |
80 | ||
81 | \func{}{wxDragImage}{\param{const wxListCtrl\& }{treeCtrl}, \param{long }{id}} | |
82 | ||
83 | Constructs a drag image from the text in the given tree control item, and optional cursor. | |
84 | ||
85 | \pythonnote{This constructor is called wxDragListItem in wxPython.} | |
86 | ||
87 | \func{}{wxDragImage}{\param{const wxCursor\& }{cursor = wxNullCursor}, | |
88 | \param{const wxPoint\& }{cursorHotspot = wxPoint(0, 0)}} | |
89 | ||
90 | Constructs a drag image an optional cursor. This constructor is only available for | |
91 | wxGenericDragImage, and can be used when the application | |
92 | supplies \helpref{wxDragImage::DoDrawImage}{wxdragimagedodrawimage} and \helpref{wxDragImage::GetImageRect}{wxdragimagegetimagerect}. | |
93 | ||
94 | \wxheading{Parameters} | |
95 | ||
96 | \docparam{image}{Icon or bitmap to be used as the drag image. The bitmap can | |
97 | have a mask.} | |
98 | ||
99 | \docparam{text}{Text used to construct a drag image.} | |
100 | ||
101 | \docparam{cursor}{Optional cursor to combine with the image.} | |
102 | ||
103 | \docparam{hotspot}{This parameter is deprecated.} | |
104 | ||
105 | \docparam{treeCtrl}{Tree control for constructing a tree drag image.} | |
106 | ||
107 | \docparam{listCtrl}{List control for constructing a list drag image.} | |
108 | ||
109 | \docparam{id}{Tree or list control item id.} | |
110 | ||
111 | \membersection{wxDragImage::BeginDrag}\label{wxdragimagebegindrag} | |
112 | ||
113 | \func{bool}{BeginDrag}{\param{const wxPoint\& }{hotspot}, \param{wxWindow* }{window}, \param{bool}{ fullScreen = false}, \param{wxRect*}{ rect = NULL}} | |
114 | ||
115 | Start dragging the image, in a window or full screen. | |
116 | ||
117 | \func{bool}{BeginDrag}{\param{const wxPoint\& }{hotspot}, \param{wxWindow* }{window}, \param{wxWindow*}{ boundingWindow}} | |
118 | ||
119 | Start dragging the image, using the first window to capture the mouse and the second | |
120 | to specify the bounding area. This form is equivalent to using the first form, | |
121 | but more convenient than working out the bounding rectangle explicitly. | |
122 | ||
123 | You need to then call \helpref{wxDragImage::Show}{wxdragimageshow} | |
124 | and \helpref{wxDragImage::Move}{wxdragimagemove} to show the image on the screen. | |
125 | ||
126 | Call \helpref{wxDragImage::EndDrag}{wxdragimageenddrag} when the drag has finished. | |
127 | ||
128 | Note that this call automatically calls CaptureMouse. | |
129 | ||
130 | \wxheading{Parameters} | |
131 | ||
132 | \docparam{hotspot}{The location of the drag position relative to the upper-left corner | |
133 | of the image.} | |
134 | ||
135 | \docparam{window}{The window that captures the mouse, and within which the dragging | |
136 | is limited unless {\it fullScreen} is true.} | |
137 | ||
138 | \docparam{boundingWindow}{In the second form of the function, specifies the | |
139 | area within which the drag occurs.} | |
140 | ||
141 | \docparam{fullScreen}{If true, specifies that the drag will be visible over the full | |
142 | screen, or over as much of the screen as is specified by {\it rect}. Note that the mouse will | |
143 | still be captured in {\it window}.} | |
144 | ||
145 | \docparam{rect}{If non-NULL, specifies the rectangle (in screen coordinates) that | |
146 | bounds the dragging operation. Specifying this can make the operation more efficient | |
147 | by cutting down on the area under consideration, and it can also make a visual difference | |
148 | since the drag is clipped to this area.} | |
149 | ||
150 | \membersection{wxDragImage::DoDrawImage}\label{wxdragimagedodrawimage} | |
151 | ||
152 | \func{virtual bool}{DoDrawImage}{\param{wxDC\&}{ dc}, \param{const wxPoint\&}{ pos}} | |
153 | ||
154 | Draws the image on the device context with top-left corner at the given position. | |
155 | ||
156 | This function is only available with wxGenericDragImage, to allow applications to | |
157 | draw their own image instead of using an actual bitmap. If you override this function, | |
158 | you must also override \helpref{wxDragImage::GetImageRect}{wxdragimagegetimagerect}. | |
159 | ||
160 | \membersection{wxDragImage::EndDrag}\label{wxdragimageenddrag} | |
161 | ||
162 | \func{bool}{EndDrag}{\void} | |
163 | ||
164 | Call this when the drag has finished. | |
165 | ||
166 | Note that this call automatically calls ReleaseMouse. | |
167 | ||
168 | \membersection{wxDragImage::GetImageRect}\label{wxdragimagegetimagerect} | |
169 | ||
170 | \constfunc{virtual wxRect}{GetImageRect}{\param{const wxPoint\&}{ pos}} | |
171 | ||
172 | Returns the rectangle enclosing the image, assuming that the image is drawn with its | |
173 | top-left corner at the given point. | |
174 | ||
175 | This function is available in wxGenericDragImage only, and may be overridden (together with | |
176 | \helpref{wxDragImage::DoDrawImage}{wxdragimagedodrawimage}) to provide a virtual drawing capability. | |
177 | ||
178 | \membersection{wxDragImage::Hide}\label{wxdragimagehide} | |
179 | ||
180 | \func{bool}{Hide}{\void} | |
181 | ||
182 | Hides the image. You may wish to call this before updating the window | |
183 | contents (perhaps highlighting an item). Then call \helpref{wxDragImage::Move}{wxdragimagemove} | |
184 | and \helpref{wxDragImage::Show}{wxdragimageshow}. | |
185 | ||
186 | \membersection{wxDragImage::Move}\label{wxdragimagemove} | |
187 | ||
188 | \func{bool}{Move}{\param{const wxPoint\& }{pt}} | |
189 | ||
190 | Call this to move the image to a new position. The image will only be shown if | |
191 | \helpref{wxDragImage::Show}{wxdragimageshow} has been called previously (for example | |
192 | at the start of the drag). | |
193 | ||
194 | {\it pt} is the position in client coordinates (relative to the window specified in BeginDrag). | |
195 | ||
196 | You can move the image either when the image is hidden or shown, but in general dragging | |
197 | will be smoother if you move the image when it is shown. | |
198 | ||
199 | \membersection{wxDragImage::Show}\label{wxdragimageshow} | |
200 | ||
201 | \func{bool}{Show}{\void} | |
202 | ||
203 | Shows the image. Call this at least once when dragging. | |
204 | ||
205 | \membersection{wxDragImage::UpdateBackingFromWindow}\label{wxdragimageupdatebackingfromwindow} | |
206 | ||
207 | \constfunc{bool}{UpdateBackingFromWindow}{\param{wxDC\&}{ windowDC}, \param{wxMemoryDC\&}{ destDC}, | |
208 | \param{const wxRect\&}{ sourceRect}, \param{const wxRect\&}{ destRect}} | |
209 | ||
210 | Override this if you wish to draw the window contents to the backing bitmap | |
211 | yourself. This can be desirable if you wish to avoid flicker by not having to | |
212 | redraw the updated window itself just before dragging, which can cause a flicker just | |
213 | as the drag starts. Instead, paint the drag image's backing bitmap to show the appropriate | |
214 | graphic {\it minus the objects to be dragged}, and leave the window itself to be updated | |
215 | by the drag image. This can provide eerily smooth, flicker-free drag behaviour. | |
216 | ||
217 | The default implementation copies the window contents to the backing bitmap. A new | |
218 | implementation will normally copy information from another source, such as from its | |
219 | own backing bitmap if it has one, or directly from internal data structures. | |
220 | ||
221 | This function is available in wxGenericDragImage only. | |
222 |