git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18805 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			85 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| \section{Drag and drop overview}\label{wxdndoverview}
 | |
| 
 | |
| Classes: \helpref{wxDataObject}{wxdataobject}, 
 | |
| \helpref{wxTextDataObject}{wxtextdataobject}, 
 | |
| \helpref{wxDropSource}{wxdropsource}, 
 | |
| \helpref{wxDropTarget}{wxdroptarget}, 
 | |
| \helpref{wxTextDropTarget}{wxtextdroptarget}, 
 | |
| \helpref{wxFileDropTarget}{wxfiledroptarget}
 | |
| 
 | |
| Note that wxUSE\_DRAG\_AND\_DROP must be defined in setup.h in order
 | |
| to use drag and drop in wxWindows.
 | |
| 
 | |
| See also: \helpref{wxDataObject overview}{wxdataobjectoverview} and \helpref{DnD sample}{samplednd}
 | |
| 
 | |
| It may be noted that data transfer to and from the clipboard is quite
 | |
| similar to data transfer with drag and drop and the code to implement
 | |
| these two types is almost the same. In particular, both data transfer
 | |
| mechanisms store data in some kind of \helpref{wxDataObject}{wxdataobject}
 | |
| and identify its format(s) using the \helpref{wxDataFormat}{wxdataformat}
 | |
| class.
 | |
| 
 | |
| To be a {\it drag source}, i.e. to provide the data which may be dragged by
 | |
| user elsewhere, you should implement the following steps:
 | |
| 
 | |
| \begin{itemize}\itemsep=0pt
 | |
| \item {\bf Preparation:} First of all, a data object must be created and
 | |
| initialized with the data you wish to drag. For example:
 | |
| 
 | |
| \begin{verbatim}
 | |
| 	wxTextDataObject my_data("This text will be dragged.");
 | |
| \end{verbatim}
 | |
| \item{\bf Drag start:} To start dragging process (typically in response to a
 | |
| mouse click) you must call \helpref{wxDropSource::DoDragDrop}{wxdropsourcedodragdrop}
 | |
| like this:
 | |
| 
 | |
| \begin{verbatim}
 | |
| 	wxDropSource dragSource( this );
 | |
| 	dragSource.SetData( my_data );
 | |
| 	wxDragResult result = dragSource.DoDragDrop( true );
 | |
| \end{verbatim}
 | |
| \item {\bf Dragging:} The call to DoDragDrop() blocks the program until the user release the
 | |
| mouse button (unless you override \helpref{GiveFeedback}{wxdropsourcegivefeedback} function
 | |
| to do something special). When the mouse moves in a window of a program which understands the
 | |
| same drag-and-drop protocol (any program under Windows or any program supporting the
 | |
| XDnD protocol under X Windows), the corresponding \helpref{wxDropTarget}{wxdroptarget} methods
 | |
| are called - see below.
 | |
| \item {\bf Processing the result:} DoDragDrop() returns an {\it effect code} which
 | |
| is one of the values of {\tt wxDragResult} enum (explained \helpref{here}{wxdroptarget}):
 | |
| 
 | |
| \begin{verbatim}
 | |
| 	switch (result)
 | |
| 	{
 | |
| 	    case wxDragCopy: /* copy the data */ break;
 | |
| 	    case wxDragMove: /* move the data */ break;
 | |
| 	    default:         /* do nothing */ break;
 | |
| 	}
 | |
| \end{verbatim}
 | |
| \end{itemize}
 | |
| 
 | |
| To be a {\it drop target}, i.e. to receive the data dropped by user you should
 | |
| follow the instructions below:
 | |
| 
 | |
| \begin{itemize}\itemsep=0pt
 | |
| \item {\bf Initialization:} For a window to be drop target, it needs to have
 | |
| an associated \helpref{wxDropTarget}{wxdroptarget} object. Normally, you will
 | |
| call \helpref{wxWindow::SetDropTarget}{wxwindowsetdroptarget} during window
 | |
| creation associating you drop target with it. You must derive a class from
 | |
| wxDropTarget and override its pure virtual methods. Alternatively, you may
 | |
| derive from \helpref{wxTextDropTarget}{wxtextdroptarget} or
 | |
| \helpref{wxFileDropTarget}{wxfiledroptarget} and override their OnDropText()
 | |
| or OnDropFiles() method.
 | |
| \item {\bf Drop:} When the user releases the mouse over a window, wxWindows
 | |
| queries the associated wxDropTarget object if it accepts the data. For this,
 | |
| a \helpref{wxDataObject}{wxdataobject} must be associated with the drop target
 | |
| and this data object will be responsible for the format negotiation between
 | |
| the drag source and the drop target. If all goes well, then \helpref{OnData}{wxdroptargetondata} 
 | |
| will get called and the wxDataObject belonging to the drop target can get 
 | |
| filled with data.
 | |
| \item {\bf The end:} After processing the data, DoDragDrop() returns either
 | |
| wxDragCopy or wxDragMove depending on the state of the keys (<Ctrl>, <Shift>
 | |
| and <Alt>) at the moment of drop. There is currently no way for the drop
 | |
| target to change this return code.
 | |
| \end{itemize}
 | |
| 
 |