/////////////////////////////////////////////////////////////////////////////// // Name: ole/droptgt.h // Purpose: declaration of the wxDropTarget class // Author: Vadim Zeitlin // Modified by: // Created: 06.03.98 // RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows license /////////////////////////////////////////////////////////////////////////////// // ============================================================================ // prolog // ============================================================================ #ifndef _OLEDROPTGT_H #define _OLEDROPTGT_H #ifdef __GNUG__ #pragma interface "droptgt.h" #endif #if !USE_DRAG_AND_DROP #error "You should #define USE_DRAG_AND_DROP to 1 to compile this file!" #endif //WX_DRAG_DROP // ---------------------------------------------------------------------------- // forward declarations // ---------------------------------------------------------------------------- class wxIDropTarget; struct IDataObject; // ---------------------------------------------------------------------------- // An instance of the class wxDropTarget may be associated with any wxWindow // derived object via SetDropTarget() function. If this is done, the virtual // methods of wxDropTarget are called when something is dropped on the window. // // Note that wxDropTarget is an abstract base class (ABC) and you should derive // your own class from it implementing pure virtual function in order to use it // (all of them, including protected ones which are called by the class itself) // ---------------------------------------------------------------------------- class WXDLLEXPORT wxDropTarget { public: // ctor & dtor wxDropTarget(); virtual ~wxDropTarget(); // normally called by wxWindow on window creation/destruction, but might be // called `manually' as well. Register() returns true on success. bool Register(WXHWND hwnd); void Revoke(WXHWND hwnd); // do we accept this kind of data? virtual bool IsAcceptedData(IDataObject *pIDataSource) const; // called when mouse enters/leaves the window: might be used to give // some visual feedback to the user virtual void OnEnter() { } virtual void OnLeave() { } // this function is called when data is dropped. // (x, y) are the coordinates of the drop virtual bool OnDrop(long x, long y, const void *pData) = 0; protected: // Override these to indicate what kind of data you support: the first // format to which data can be converted is used. The classes below show // how it can be done in the simplest cases. // how many different (clipboard) formats do you support? virtual size_t GetFormatCount() const = 0; // return the n-th supported format virtual wxDataFormat GetFormat(size_t n) const = 0; private: wxIDropTarget *m_pIDropTarget; // the pointer to COM interface }; // ---------------------------------------------------------------------------- // A simple wxDropTarget derived class for text data: you only need to // override OnDropText() to get something working // ---------------------------------------------------------------------------- class WXDLLEXPORT wxTextDropTarget : public wxDropTarget { public: virtual bool OnDrop(long x, long y, const void *pData); virtual bool OnDropText(long x, long y, const char *psz) = 0; protected: virtual size_t GetFormatCount() const; virtual wxDataFormat GetFormat(size_t n) const; }; // ---------------------------------------------------------------------------- // A drop target which accepts files (dragged from File Manager or Explorer) // ---------------------------------------------------------------------------- class WXDLLEXPORT wxFileDropTarget : public wxDropTarget { public: virtual bool OnDrop(long x, long y, const void *pData); // params: the number of files and the array of file names virtual bool OnDropFiles(long x, long y, size_t nFiles, const char * const aszFiles[]) = 0; protected: virtual size_t GetFormatCount() const; virtual wxDataFormat GetFormat(size_t n) const; }; // ============================================================================ #endif //_OLEDROPTGT_H