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;} } } }
相关文章推荐
- C#索引器
- EnumHelper.cs枚举助手(枚举描述信息多语言支持)C#
- C# 泛型类型参数的约束
- C# 泛型方法
- C# 运行时中的泛型
- C# 泛型委托
- C# 泛型 default()方法
- C#文件读写常用接口
- C#获取机器硬件信息
- 图片的拆分
- C# VS2012/VS2013 编译management错误
- C# BackgroundWorker分析以及使用
- C#单例模式初识
- C#语法糖(Csharp Syntactic sugar)大汇总
- C#动态调用WCF接口(3)
- C#动态调用WCF接口(2)
- c#之回车登录
- C#简单多线程Demo
- [C#基础]c#中的BeginInvoke和EndEndInvoke
- C# 毛玻璃效果