Index: trunk/sources/HeuristicLab.Visualization.Test/MainForm.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Visualization.Test/MainForm.Designer.cs	(revision 724)
+++ trunk/sources/HeuristicLab.Visualization.Test/MainForm.Designer.cs	(revision 725)
@@ -36,4 +36,5 @@
       this.canvasUI.TabIndex = 3;
       this.canvasUI.Text = "canvasUI";
+      this.canvasUI.MouseDown += new System.Windows.Forms.MouseEventHandler(this.canvasUI_MouseDown);
       // 
       // label2
Index: trunk/sources/HeuristicLab.Visualization.Test/MainForm.cs
===================================================================
--- trunk/sources/HeuristicLab.Visualization.Test/MainForm.cs	(revision 724)
+++ trunk/sources/HeuristicLab.Visualization.Test/MainForm.cs	(revision 725)
@@ -1,10 +1,13 @@
 ﻿using System.Drawing;
 using System.Windows.Forms;
-using HeuristicLab.Visualization;
 
 namespace HeuristicLab.Visualization.Test {
   public partial class MainForm : Form {
+    private MouseEventListener dragDropListener;
+
     public MainForm() {
       InitializeComponent();
+
+      CreateMouseEventListeners();
 
       canvasUI.MainCanvas.WorldShape = new WorldShape(new RectangleD(0, 0, 800, 600), new RectangleD(0, 0, 800, 600));
@@ -16,4 +19,10 @@
 
       canvasUI.Invalidate();
+    }
+
+    private void CreateMouseEventListeners() {
+      dragDropListener = new MouseEventListener();
+      dragDropListener.OnMouseMove += DragDrop_OnMouseMove;
+      dragDropListener.OnMouseUp += DragDrop_OnMouseUp;
     }
 
@@ -34,6 +43,7 @@
 
       for (int i = 0; i < 10000; i++) {
-        RectangleShape rect = new RectangleShape(x1, y1, x1+0.3, y1+0.3, 0, Color.Maroon);
-        x1 += 0.4; y1 += 0.4;
+        RectangleShape rect = new RectangleShape(x1, y1, x1 + 0.3, y1 + 0.3, 0, Color.Maroon);
+        x1 += 0.4;
+        y1 += 0.4;
         rightWorld.AddShape(rect);
       }
@@ -81,4 +91,28 @@
       mainWorld.AddShape(leftWorld);
     }
+
+    private void canvasUI_MouseDown(object sender, MouseEventArgs e) {
+      mouseEventDemonstrationGraphics = canvasUI.CreateGraphics();
+
+      dragDropListener.StartPoint = e.Location;
+      lastActualPoint = e.Location;
+
+      canvasUI.MouseEventListener = dragDropListener;
+    }
+
+    private Point lastActualPoint;
+    private Graphics mouseEventDemonstrationGraphics;
+
+    private void DragDrop_OnMouseUp(Point startPoint, Point actualPoint) {
+      canvasUI.MouseEventListener = null;
+
+      canvasUI.Invalidate();
+      mouseEventDemonstrationGraphics.Dispose();
+    }
+
+    private void DragDrop_OnMouseMove(Point startPoint, Point actualPoint) {
+      mouseEventDemonstrationGraphics.DrawLine(Pens.Blue, lastActualPoint, actualPoint);
+      lastActualPoint = actualPoint;
+    }
   }
 }
Index: trunk/sources/HeuristicLab.Visualization/CanvasUI.cs
===================================================================
--- trunk/sources/HeuristicLab.Visualization/CanvasUI.cs	(revision 724)
+++ trunk/sources/HeuristicLab.Visualization/CanvasUI.cs	(revision 725)
@@ -39,9 +39,13 @@
 
     private void CanvasUI_MouseMove(object sender, MouseEventArgs e) {
-      if (mouseEventListener != null) {}
+      if (mouseEventListener != null) {
+        mouseEventListener.MouseMove(e.Location);
+      }
     }
 
     private void CanvasUI_MouseUp(object sender, MouseEventArgs e) {
-      if (mouseEventListener != null) {}
+      if (mouseEventListener != null) {
+        mouseEventListener.MouseUp(e.Location);
+      }
     }
   }
Index: trunk/sources/HeuristicLab.Visualization/MouseEventListener.cs
===================================================================
--- trunk/sources/HeuristicLab.Visualization/MouseEventListener.cs	(revision 724)
+++ trunk/sources/HeuristicLab.Visualization/MouseEventListener.cs	(revision 725)
@@ -1,3 +1,29 @@
-﻿namespace HeuristicLab.Visualization {
-  public class MouseEventListener {}
+﻿using System.Drawing;
+
+namespace HeuristicLab.Visualization {
+  public class MouseEventListener {
+    public event MouseEventListenerHandler OnMouseMove;
+    public event MouseEventListenerHandler OnMouseUp;
+
+    private Point startPoint;
+
+    public void MouseMove(Point actualPoint) {
+      if (OnMouseMove != null) {
+        OnMouseMove(startPoint, actualPoint);
+      }
+    }
+
+    public void MouseUp(Point actualPoint) {
+      if (OnMouseUp != null) {
+        OnMouseUp(startPoint, actualPoint);
+      }
+    }
+
+    public Point StartPoint {
+      get { return startPoint; }
+      set { startPoint = value; }
+    }
+  }
+
+  public delegate void MouseEventListenerHandler(Point startPoint, Point actualPoint);
 }
