您的位置:首页 > 编程语言 > C#

C#实现GDI+基本图的缩放、拖拽、移动

2016-07-16 14:41 459 查看
C#实现GDI+基本图的缩放、拖拽、移动示例代码如下:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;

namespaceResizableControls
{
publicpartialclassMainForm:Form
{
///<summary>
///有关鼠标样式的相关枚举
///</summary>
privateenumEnumMousePointPosition
{
MouseSizeNone=0,//无
MouseSizeRight=1,//拉伸右边框
MouseSizeLeft=2,//拉伸左边框
MouseSizeBottom=3,//拉伸下边框
MouseSizeTop=4,//拉伸上边框
MouseSizeTopLeft=5,//拉伸左上角
MouseSizeTopRight=6,//拉伸右上角
MouseSizeBottomLeft=7,//拉伸左下角
MouseSizeBottomRight=8,//拉伸右下角
MouseDrag=9//鼠标拖动
}
constintBand=5;//范围半径
constintMinWidth=10;//最低宽度
constintMinHeight=10;//最低高度
privateEnumMousePointPositionm_MousePointPosition;//鼠标样式枚举
privatePointm_lastPoint;//光标上次移动的位置
privatePointm_endPoint;//光标移动的当前位置

publicMainForm()
{
InitializeComponent();
//窗体中控件的事件晚期绑定
for(inti=0;i<this.Controls.Count;i++)
{
this.Controls[i].MouseDown+=newMouseEventHandler(MyMouseDown);
this.Controls[i].MouseLeave+=newEventHandler(MyMouseLeave);
this.Controls[i].MouseMove+=newMouseEventHandler(MyMouseMove);
}
}

//鼠标按下事件
privatevoidMyMouseDown(objectsender,MouseEventArgse)
{
m_lastPoint.X=e.X;
m_lastPoint.Y=e.Y;
m_endPoint.X=e.X;
m_endPoint.Y=e.Y;
}

//鼠标离开控件的事件
privatevoidMyMouseLeave(objectsender,System.EventArgse)
{
m_MousePointPosition=EnumMousePointPosition.MouseSizeNone;
this.Cursor=Cursors.Arrow;
}

//鼠标移过控件的事件
privatevoidMyMouseMove(objectsender,MouseEventArgse)
{
ControllCtrl=(senderasControl);//获得事件源
//左键按下移动
if(e.Button==MouseButtons.Left)
{
switch(m_MousePointPosition)
{
caseEnumMousePointPosition.MouseDrag:
lCtrl.Left=lCtrl.Left+e.X-m_lastPoint.X;
lCtrl.Top=lCtrl.Top+e.Y-m_lastPoint.Y;
break;
caseEnumMousePointPosition.MouseSizeBottom:
lCtrl.Height=lCtrl.Height+e.Y-m_endPoint.Y;
m_endPoint.X=e.X;
m_endPoint.Y=e.Y;//记录光标拖动的当前点
break;
caseEnumMousePointPosition.MouseSizeBottomRight:
lCtrl.Width=lCtrl.Width+e.X-m_endPoint.X;
lCtrl.Height=lCtrl.Height+e.Y-m_endPoint.Y;
m_endPoint.X=e.X;
m_endPoint.Y=e.Y;//记录光标拖动的当前点
break;
caseEnumMousePointPosition.MouseSizeRight:
lCtrl.Width=lCtrl.Width+e.X-m_endPoint.X;
//lCtrl.Height=lCtrl.Height+e.Y-m_endPoint.Y;
m_endPoint.X=e.X;
m_endPoint.Y=e.Y;//记录光标拖动的当前点
break;
caseEnumMousePointPosition.MouseSizeTop:
lCtrl.Top=lCtrl.Top+(e.Y-m_lastPoint.Y);
lCtrl.Height=lCtrl.Height-(e.Y-m_lastPoint.Y);
break;
caseEnumMousePointPosition.MouseSizeLeft:
lCtrl.Left=lCtrl.Left+e.X-m_lastPoint.X;
lCtrl.Width=lCtrl.Width-(e.X-m_lastPoint.X);
break;
caseEnumMousePointPosition.MouseSizeBottomLeft:
lCtrl.Left=lCtrl.Left+e.X-m_lastPoint.X;
lCtrl.Width=lCtrl.Width-(e.X-m_lastPoint.X);
lCtrl.Height=lCtrl.Height+e.Y-m_endPoint.Y;
m_endPoint.X=e.X;
m_endPoint.Y=e.Y;//记录光标拖动的当前点
break;
caseEnumMousePointPosition.MouseSizeTopRight:
lCtrl.Top=lCtrl.Top+(e.Y-m_lastPoint.Y);
lCtrl.Width=lCtrl.Width+(e.X-m_endPoint.X);
lCtrl.Height=lCtrl.Height-(e.Y-m_lastPoint.Y);
m_endPoint.X=e.X;
m_endPoint.Y=e.Y;//记录光标拖动的当前点
break;
caseEnumMousePointPosition.MouseSizeTopLeft:
lCtrl.Left=lCtrl.Left+e.X-m_lastPoint.X;
lCtrl.Top=lCtrl.Top+(e.Y-m_lastPoint.Y);
lCtrl.Width=lCtrl.Width-(e.X-m_lastPoint.X);
lCtrl.Height=lCtrl.Height-(e.Y-m_lastPoint.Y);
break;
default:
break;
}
if(lCtrl.Width<MinWidth)lCtrl.Width=MinWidth;
if(lCtrl.Height<MinHeight)lCtrl.Height=MinHeight;
}
else
{
//'判断光标的位置状态
m_MousePointPosition=MousePointPosition(lCtrl.Size,e);
switch(m_MousePointPosition)//改变光标
{
caseEnumMousePointPosition.MouseSizeNone:
this.Cursor=Cursors.Arrow;//箭头
break;
caseEnumMousePointPosition.MouseDrag:
this.Cursor=Cursors.SizeAll;//四方向
break;
caseEnumMousePointPosition.MouseSizeBottom:
this.Cursor=Cursors.SizeNS;//南北
break;
caseEnumMousePointPosition.MouseSizeTop:
this.Cursor=Cursors.SizeNS;//南北
break;
caseEnumMousePointPosition.MouseSizeLeft:
this.Cursor=Cursors.SizeWE;//东西
break;
caseEnumMousePointPosition.MouseSizeRight:
this.Cursor=Cursors.SizeWE;//东西
break;
caseEnumMousePointPosition.MouseSizeBottomLeft:
this.Cursor=Cursors.SizeNESW;//东北到南西
break;
caseEnumMousePointPosition.MouseSizeBottomRight:
this.Cursor=Cursors.SizeNWSE;//东南到西北
break;
caseEnumMousePointPosition.MouseSizeTopLeft:
this.Cursor=Cursors.SizeNWSE;//东南到西北
break;
caseEnumMousePointPosition.MouseSizeTopRight:
this.Cursor=Cursors.SizeNESW;//东北到南西
break;
default:
break;
}
}
}
//坐标位置判定
privateEnumMousePointPositionMousePointPosition(Sizesize,System.Windows.Forms.MouseEventArgse)
{
if((e.X>=-1*Band)|(e.X<=size.Width)|
(e.Y>=-1*Band)|(e.Y<=size.Height))
{
if(e.X<Band)
{
if(e.Y<Band)
{
returnEnumMousePointPosition.MouseSizeTopLeft;
}
else
{
if(e.Y>-1*Band+size.Height)
{
returnEnumMousePointPosition.MouseSizeBottomLeft;
}
else
{
returnEnumMousePointPosition.MouseSizeLeft;
}
}
}
else
{
if(e.X>-1*Band+size.Width)
{
if(e.Y<Band)
{returnEnumMousePointPosition.MouseSizeTopRight;}
else
{
if(e.Y>-1*Band+size.Height)
{returnEnumMousePointPosition.MouseSizeBottomRight;}
else
{returnEnumMousePointPosition.MouseSizeRight;}
}
}
else
{
if(e.Y<Band)
{returnEnumMousePointPosition.MouseSizeTop;}
else
{
if(e.Y>-1*Band+size.Height)
{returnEnumMousePointPosition.MouseSizeBottom;}
else
{returnEnumMousePointPosition.MouseDrag;}
}
}
}
}
else
{returnEnumMousePointPosition.MouseSizeNone;}
}
}
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: