博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#实现GDI+基本图的缩放、拖拽、移动
阅读量:7054 次
发布时间:2019-06-28

本文共 9504 字,大约阅读时间需要 31 分钟。

C#实现GDI+基本图的缩放、拖拽、移动示例代码如下:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace ResizableControls {
public partial class MainForm : Form {
/// /// 有关鼠标样式的相关枚举 /// private enum EnumMousePointPosition {
MouseSizeNone = 0, //无 MouseSizeRight = 1, //拉伸右边框 MouseSizeLeft = 2, //拉伸左边框 MouseSizeBottom = 3, //拉伸下边框 MouseSizeTop = 4, //拉伸上边框 MouseSizeTopLeft = 5,//拉伸左上角 MouseSizeTopRight = 6,//拉伸右上角 MouseSizeBottomLeft = 7,//拉伸左下角 MouseSizeBottomRight = 8,//拉伸右下角 MouseDrag = 9 //鼠标拖动 } const int Band = 5;//范围半径 const int MinWidth = 10;//最低宽度 const int MinHeight = 10;//最低高度 private EnumMousePointPosition m_MousePointPosition; //鼠标样式枚举 private Point m_lastPoint; //光标上次移动的位置 private Point m_endPoint; //光标移动的当前位置 public MainForm() {
InitializeComponent(); //窗体中控件的事件晚期绑定 for (int i = 0; i < this.Controls.Count; i++) {
this.Controls[i].MouseDown += new MouseEventHandler(MyMouseDown); this.Controls[i].MouseLeave += new EventHandler(MyMouseLeave); this.Controls[i].MouseMove += new MouseEventHandler(MyMouseMove); } } //鼠标按下事件 private void MyMouseDown(object sender,MouseEventArgs e) {
m_lastPoint.X = e.X; m_lastPoint.Y = e.Y; m_endPoint.X = e.X; m_endPoint.Y = e.Y; } //鼠标离开控件的事件 private void MyMouseLeave(object sender, System.EventArgs e) {
m_MousePointPosition = EnumMousePointPosition.MouseSizeNone; this.Cursor = Cursors.Arrow; } //鼠标移过控件的事件 private void MyMouseMove(object sender, MouseEventArgs e) {
Control lCtrl = (sender as Control);//获得事件源 //左键按下移动 if (e.Button == MouseButtons.Left) {
switch (m_MousePointPosition) {
case EnumMousePointPosition.MouseDrag: lCtrl.Left = lCtrl.Left + e.X - m_lastPoint.X; lCtrl.Top = lCtrl.Top + e.Y - m_lastPoint.Y; break; case EnumMousePointPosition.MouseSizeBottom: lCtrl.Height = lCtrl.Height + e.Y - m_endPoint.Y; m_endPoint.X = e.X; m_endPoint.Y = e.Y; //记录光标拖动的当前点 break; case EnumMousePointPosition.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; case EnumMousePointPosition.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; case EnumMousePointPosition.MouseSizeTop: lCtrl.Top = lCtrl.Top + (e.Y - m_lastPoint.Y); lCtrl.Height = lCtrl.Height - (e.Y - m_lastPoint.Y); break; case EnumMousePointPosition.MouseSizeLeft: lCtrl.Left = lCtrl.Left + e.X - m_lastPoint.X; lCtrl.Width = lCtrl.Width - (e.X - m_lastPoint.X); break; case EnumMousePointPosition.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; case EnumMousePointPosition.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; case EnumMousePointPosition.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) //改变光标 {
case EnumMousePointPosition.MouseSizeNone: this.Cursor = Cursors.Arrow;//箭头 break; case EnumMousePointPosition.MouseDrag: this.Cursor = Cursors.SizeAll;//四方向 break; case EnumMousePointPosition.MouseSizeBottom: this.Cursor = Cursors.SizeNS;//南北 break; case EnumMousePointPosition.MouseSizeTop: this.Cursor = Cursors.SizeNS;//南北 break; case EnumMousePointPosition.MouseSizeLeft: this.Cursor = Cursors.SizeWE;//东西 break; case EnumMousePointPosition.MouseSizeRight: this.Cursor = Cursors.SizeWE;//东西 break; case EnumMousePointPosition.MouseSizeBottomLeft: this.Cursor = Cursors.SizeNESW;//东北到南西 break; case EnumMousePointPosition.MouseSizeBottomRight: this.Cursor = Cursors.SizeNWSE;//东南到西北 break; case EnumMousePointPosition.MouseSizeTopLeft: this.Cursor = Cursors.SizeNWSE;//东南到西北 break; case EnumMousePointPosition.MouseSizeTopRight: this.Cursor = Cursors.SizeNESW;//东北到南西 break; default: break; } } } //坐标位置判定 private EnumMousePointPosition MousePointPosition(Size size, System.Windows.Forms.MouseEventArgs e) {
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) { return EnumMousePointPosition.MouseSizeTopLeft; } else {
if (e.Y > -1 * Band + size.Height) { return EnumMousePointPosition.MouseSizeBottomLeft; } else {
return EnumMousePointPosition.MouseSizeLeft; } } } else {
if (e.X > -1 * Band + size.Width) {
if (e.Y < Band) { return EnumMousePointPosition.MouseSizeTopRight; } else {
if (e.Y > -1 * Band + size.Height) { return EnumMousePointPosition.MouseSizeBottomRight; } else { return EnumMousePointPosition.MouseSizeRight; } } } else {
if (e.Y < Band) { return EnumMousePointPosition.MouseSizeTop; } else {
if (e.Y > -1 * Band + size.Height) { return EnumMousePointPosition.MouseSizeBottom; } else { return EnumMousePointPosition.MouseDrag; } } } } } else { return EnumMousePointPosition.MouseSizeNone; } } } }
 

转载地址:http://qslol.baihongyu.com/

你可能感兴趣的文章
Python 连接数据库
查看>>
MyBatis的配置方式
查看>>
5分钟,关于Python 解包,你需要知道的一切
查看>>
卫星定位领域相关基础知识汇总
查看>>
Windows10 VS2017 C++使用crypto++库加密解密(AES)
查看>>
喜鹊医药获近亿元B轮融资,助力创新药物研究开发
查看>>
AnalyticDB for PostgreSQL (原HybridDB for PostgreSQL) 实时数据仓库上手指南
查看>>
分组填报表的制作
查看>>
Elasticsearch数据
查看>>
共享雨伞漂流伞获近亿元战略投资,投资方为蚂蚁金服
查看>>
Cookie(1)
查看>>
Confluence 6 可以自定义的元素
查看>>
你让我怎么说
查看>>
服务器怎么租?阿里云实例规格怎么选?
查看>>
KodExplorer 4.40 发布,权限机制优化
查看>>
WPF 为资源字典 添加事件响应的后台类
查看>>
ASP.NET MVC-异常处理&自定义错误页
查看>>
官宣!阿里巴巴云效平台成功助力国内首个 DevOps 标准建设!
查看>>
分布式存储的六大优点
查看>>
Redis核心概念
查看>>