Change {DECLARE,IMPLEMENT}_*CLASS and {DECLARE,BEGIN,END}_EVENT_TABLE
occurrences to use the wx-prefixed version of the macros.
		
	
		
			
				
	
	
		
			191 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        dragimag.h
 | 
						|
// Purpose:     wxDragImage sample
 | 
						|
// Author:      Julian Smart
 | 
						|
// Modified by:
 | 
						|
// Created:     28/2/2000
 | 
						|
// Copyright:   (c) Julian Smart
 | 
						|
// Licence:     wxWindows licence
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
#ifndef _WX_DRAGIMAGSAMPLE_
 | 
						|
#define _WX_DRAGIMAGSAMPLE_
 | 
						|
 | 
						|
// derived classes
 | 
						|
 | 
						|
class MyFrame;
 | 
						|
class MyApp;
 | 
						|
class MyCanvas;
 | 
						|
class DragShape;
 | 
						|
 | 
						|
// MyFrame
 | 
						|
 | 
						|
class MyFrame: public wxFrame
 | 
						|
{
 | 
						|
public:
 | 
						|
    MyFrame();
 | 
						|
 | 
						|
    void OnAbout( wxCommandEvent &event );
 | 
						|
    void OnQuit( wxCommandEvent &event );
 | 
						|
 | 
						|
    MyCanvas* GetCanvas() const { return m_canvas; }
 | 
						|
    void SetCanvas(MyCanvas* canvas) { m_canvas = canvas; }
 | 
						|
 | 
						|
private:
 | 
						|
    MyCanvas*       m_canvas;
 | 
						|
 | 
						|
    wxDECLARE_DYNAMIC_CLASS(MyFrame);
 | 
						|
    wxDECLARE_EVENT_TABLE();
 | 
						|
};
 | 
						|
 | 
						|
// MyApp
 | 
						|
 | 
						|
class MyApp: public wxApp
 | 
						|
{
 | 
						|
public:
 | 
						|
    MyApp();
 | 
						|
    virtual bool OnInit() wxOVERRIDE;
 | 
						|
    virtual int OnExit() wxOVERRIDE;
 | 
						|
 | 
						|
//// Operations
 | 
						|
 | 
						|
    // Tile the bitmap
 | 
						|
    bool TileBitmap(const wxRect& rect, wxDC& dc, wxBitmap& bitmap);
 | 
						|
 | 
						|
//// Accessors
 | 
						|
    wxBitmap& GetBackgroundBitmap() const { return (wxBitmap&) m_background; }
 | 
						|
 | 
						|
    bool GetUseScreen() const { return m_useScreen; }
 | 
						|
    void SetUseScreen(bool useScreen) { m_useScreen = useScreen; }
 | 
						|
 | 
						|
    void OnUseScreen(wxCommandEvent& event);
 | 
						|
 | 
						|
protected:
 | 
						|
    wxBitmap    m_background;
 | 
						|
    bool        m_useScreen;
 | 
						|
 | 
						|
    wxDECLARE_EVENT_TABLE();
 | 
						|
};
 | 
						|
 | 
						|
wxDECLARE_APP(MyApp);
 | 
						|
 | 
						|
#define TEST_USE_SCREEN   100
 | 
						|
 | 
						|
// MyCanvas
 | 
						|
 | 
						|
// Dragging modes
 | 
						|
#define TEST_DRAG_NONE     0
 | 
						|
#define TEST_DRAG_START    1
 | 
						|
#define TEST_DRAG_DRAGGING 2
 | 
						|
 | 
						|
class MyCanvas: public wxScrolledWindow
 | 
						|
{
 | 
						|
public:
 | 
						|
    MyCanvas( wxWindow *parent, wxWindowID, const wxPoint &pos, const wxSize &size );
 | 
						|
    ~MyCanvas();
 | 
						|
 | 
						|
    void OnPaint( wxPaintEvent &event );
 | 
						|
    void OnEraseBackground(wxEraseEvent& event);
 | 
						|
    void OnMouseEvent(wxMouseEvent& event);
 | 
						|
 | 
						|
    void DrawShapes(wxDC& dc);
 | 
						|
    void EraseShape(DragShape* shape, wxDC& dc);
 | 
						|
    void ClearShapes();
 | 
						|
    DragShape* FindShape(const wxPoint& pt) const;
 | 
						|
 | 
						|
    wxList& GetDisplayList() { return m_displayList; }
 | 
						|
 | 
						|
protected:
 | 
						|
 | 
						|
private:
 | 
						|
    wxList          m_displayList; // A list of DragShapes
 | 
						|
    int             m_dragMode;
 | 
						|
    DragShape*      m_draggedShape;
 | 
						|
    DragShape*      m_currentlyHighlighted; // The shape that's being highlighted
 | 
						|
    wxPoint         m_dragStartPos;
 | 
						|
    wxDragImage*    m_dragImage;
 | 
						|
 | 
						|
    wxDECLARE_ABSTRACT_CLASS(MyCanvas);
 | 
						|
    wxDECLARE_EVENT_TABLE();
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
// Ways to drag a shape
 | 
						|
 | 
						|
#define SHAPE_DRAG_BITMAP       1
 | 
						|
#define SHAPE_DRAG_TEXT         2
 | 
						|
#define SHAPE_DRAG_ICON         3
 | 
						|
 | 
						|
// Shape
 | 
						|
 | 
						|
class DragShape: public wxObject
 | 
						|
{
 | 
						|
public:
 | 
						|
    DragShape(const wxBitmap& bitmap);
 | 
						|
    ~DragShape(){};
 | 
						|
 | 
						|
//// Operations
 | 
						|
 | 
						|
    bool HitTest(const wxPoint& pt) const;
 | 
						|
    bool Draw(wxDC& dc, bool highlight = false);
 | 
						|
 | 
						|
//// Accessors
 | 
						|
 | 
						|
    wxPoint GetPosition() const { return m_pos; }
 | 
						|
    void SetPosition(const wxPoint& pos) { m_pos = pos; }
 | 
						|
 | 
						|
    wxRect GetRect() const { return wxRect(m_pos.x, m_pos.y, m_bitmap.GetWidth(), m_bitmap.GetHeight()); }
 | 
						|
 | 
						|
    wxBitmap& GetBitmap() const { return (wxBitmap&) m_bitmap; }
 | 
						|
    void SetBitmap(const wxBitmap& bitmap) { m_bitmap = bitmap; }
 | 
						|
 | 
						|
    int GetDragMethod() const { return m_dragMethod; }
 | 
						|
    void SetDragMethod(int method) { m_dragMethod = method; }
 | 
						|
 | 
						|
    bool IsShown() const { return m_show; }
 | 
						|
    void SetShow(bool show) { m_show = show; }
 | 
						|
 | 
						|
protected:
 | 
						|
    wxPoint     m_pos;
 | 
						|
    wxBitmap    m_bitmap;
 | 
						|
    int         m_dragMethod;
 | 
						|
    bool        m_show;
 | 
						|
};
 | 
						|
 | 
						|
// MyDragImage
 | 
						|
// A derived class is required since we're overriding UpdateBackingFromWindow,
 | 
						|
// for compatibility with Mac OS X (Core Graphics) which does not support blitting
 | 
						|
// from a window.
 | 
						|
 | 
						|
class MyDragImage: public wxDragImage
 | 
						|
{
 | 
						|
public:
 | 
						|
    MyDragImage(MyCanvas* canvas): m_canvas(canvas) {}
 | 
						|
 | 
						|
    MyDragImage(MyCanvas* canvas, const wxBitmap& image, const wxCursor& cursor = wxNullCursor):
 | 
						|
        wxDragImage(image, cursor), m_canvas(canvas)
 | 
						|
    {
 | 
						|
    }
 | 
						|
 | 
						|
    MyDragImage(MyCanvas* canvas, const wxIcon& image, const wxCursor& cursor = wxNullCursor):
 | 
						|
        wxDragImage(image, cursor), m_canvas(canvas)
 | 
						|
    {
 | 
						|
    }
 | 
						|
 | 
						|
    MyDragImage(MyCanvas* canvas, const wxString& str, const wxCursor& cursor = wxNullCursor):
 | 
						|
        wxDragImage(str, cursor), m_canvas(canvas)
 | 
						|
    {
 | 
						|
    }
 | 
						|
 | 
						|
    // On some platforms, notably Mac OS X with Core Graphics, we can't blit from
 | 
						|
    // a window, so we need to draw the background explicitly.
 | 
						|
    virtual bool UpdateBackingFromWindow(wxDC& windowDC, wxMemoryDC& destDC, const wxRect& sourceRect,
 | 
						|
                    const wxRect& destRect) const wxOVERRIDE;
 | 
						|
 | 
						|
protected:
 | 
						|
    MyCanvas*   m_canvas;
 | 
						|
};
 | 
						|
 | 
						|
#endif
 | 
						|
    // _WX_DRAGIMAGSAMPLE_
 |