|
#region Kam 2007
/*
* I took this code from Kam article
* http://www.codeproject.com/KB/openGL/Tao_Arcball.aspx though there was
* np statement of ownership I am trying to recognize my sources. It was
* a Good article. Check it out. I will be using it for my Arcball Camera.
*/
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace AGE_Engine3D
{
public enum MouseButtonPressType { NONE, LEFTBUTTON, RIGHTBUTTON, MIDDLEBUTTON };
public class MouseControl
{
#region Fields
protected Control CurrCtrl;
protected MouseButtons FinalClick;
#endregion
#region Events
public event MouseEventHandler MouseMove;
public event EventHandler LeftClick;
public event EventHandler RightClick;
public event EventHandler MiddleClick;
public event EventHandler LeftDoubleClick;
public event EventHandler RightDoubleClick;
public event EventHandler MiddleDoubleClick;
public event MouseEventHandler LeftMouseClick;
public event MouseEventHandler RightMouseClick;
public event MouseEventHandler MiddleMouseClick;
public event MouseEventHandler LeftMouseDoubleClick;
public event MouseEventHandler RightMouseDoubleClick;
public event MouseEventHandler MiddleMouseDoubleClick;
public event MouseEventHandler LeftMouseDown;
public event MouseEventHandler LeftMouseUp;
public event MouseEventHandler RightMouseDown;
public event MouseEventHandler RightMouseUp;
public event MouseEventHandler MiddleMouseDown;
public event MouseEventHandler MiddleMouseUp;
#endregion
#region Interface
public Control Control
{
get { return CurrCtrl; }
set
{
CurrCtrl = value;
Initialize();
}
}
#endregion
#region Methods
public MouseControl()
{
}
public MouseControl(Control ctrl)
{
Control = ctrl;
}
public void AddControl(Control ctrl)
{
Control = ctrl;
}
protected virtual void Initialize()
{
CurrCtrl.MouseMove += new MouseEventHandler(OnMouseMove);
CurrCtrl.Click += new EventHandler(OnClick);
CurrCtrl.DoubleClick += new EventHandler(OnDoubleClick);
CurrCtrl.MouseClick += new MouseEventHandler(OnMouseClick);
CurrCtrl.MouseDoubleClick += new MouseEventHandler(OnMouseDoubleClick);
CurrCtrl.MouseDown += new MouseEventHandler(OnMouseDown);
CurrCtrl.MouseUp += new MouseEventHandler(OnMouseUp);
}
#endregion
#region Mouse Events
private void OnMouseMove(object sender, MouseEventArgs e)
{
MouseMove(sender, e);
}
private void OnClick(object sender, EventArgs e)
{
switch (FinalClick)
{
case MouseButtons.Left:
if (LeftClick != null)
{
LeftClick(sender, e);
}
break;
case MouseButtons.Right:
if (RightClick != null)
{
RightClick(sender, e);
}
break;
case MouseButtons.Middle:
if (MiddleClick != null)
{
MiddleClick(sender, e);
}
break;
}
}
private void OnDoubleClick(object sender, EventArgs e)
{
switch (FinalClick)
{
case MouseButtons.Left:
if (LeftDoubleClick != null)
{
LeftDoubleClick(sender, e);
}
break;
case MouseButtons.Right:
if (RightDoubleClick != null)
{
RightDoubleClick(sender, e);
}
break;
case MouseButtons.Middle:
if (MiddleDoubleClick != null)
{
MiddleDoubleClick(sender, e);
}
break;
}
}
private void OnMouseClick(object sender, MouseEventArgs e)
{
switch (e.Button)
{
case MouseButtons.Left:
{
if (LeftMouseClick != null)
{
LeftMouseClick(sender, e);
}
break;
}
case MouseButtons.Middle:
{
if (MiddleMouseClick != null)
{
MiddleMouseClick(sender, e);
}
break;
}
case MouseButtons.Right:
{
if (RightMouseClick != null)
{
RightMouseClick(sender, e);
}
break;
}
}
}
private void OnMouseDoubleClick(object sender, MouseEventArgs e)
{
switch (e.Button)
{
case MouseButtons.Left:
{
if (LeftMouseDoubleClick != null)
{
LeftMouseDoubleClick(sender, e);
}
break;
}
case MouseButtons.Middle:
{
if (MiddleMouseDoubleClick != null)
{
MiddleMouseDoubleClick(sender, e);
}
break;
}
case MouseButtons.Right:
{
if (RightMouseDoubleClick != null)
{
RightMouseDoubleClick(sender, e);
}
break;
}
}
}
private void OnMouseDown(object sender, MouseEventArgs e)
{
FinalClick = e.Button;
switch (e.Button)
{
case MouseButtons.Left:
{
if (LeftMouseDown != null)
{
LeftMouseDown(sender, e);
}
break;
}
case MouseButtons.Middle:
{
if (MiddleMouseDown != null)
{
MiddleMouseDown(sender, e);
}
break;
}
case MouseButtons.Right:
{
if (RightMouseDown != null)
{
RightMouseDown(sender, e);
}
break;
}
}
}
private void OnMouseUp(object sender, MouseEventArgs e)
{
switch (e.Button)
{
case MouseButtons.Left:
{
if (LeftMouseUp != null)
{
LeftMouseUp(sender, e);
}
break;
}
case MouseButtons.Middle:
{
if (MiddleMouseUp != null)
{
MiddleMouseUp(sender, e);
}
break;
}
case MouseButtons.Right:
{
if (RightMouseUp != null)
{
RightMouseUp(sender, e);
}
break;
}
}
}
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I am a licensed Electrical Engineer at Lea+Elliott, Inc. We specialize in the planning, procurement and implementation of transportation systems, with special emphasis on automated and emerging technologies.