功能描述:在鼠标进入一个用于绘制图形的窗体(如:Show_3D)时,滚动鼠标滚轮,使窗体中的内容能够进行放大缩小.此处以绘制XNA图形为例.

滚动鼠标的滚轮,触发的是窗体或控件上的 MouseWheel 事件。但是在VS2008以及其他版本中,窗体和控件的事件列表中并不包含 MouseWheel 事件,因此对于这个事件的事件处理函数须手动创建和实现。

首先在窗体的构造函数中,添加如下代码:

1 this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.Panel_MouseWheel);

View Code

这样只是使Panel能接收鼠标的滚动事件,但还不能实现窗体中内容的放大缩小,因此还需要添加以下代码:

private void Show_3D_MouseWheel(objectsender, MouseEventArgs e)

{float Mo = 0;if (e.Delta > 0)

{

Mo= 8;

}else{

Mo= -8;

}if (Global.myCamera.cameraPosition.Y < 90.0f)

{

Global.myCamera.cameraPosition+= 0.01f * Mo * (Global.myCamera.cameraTarget -Global.myCamera.cameraPosition);

}else{

Global.myCamera.cameraPosition.Y= 89.0f;

}

}

View Code

添加了以上代码后,运行上述的程序,发现无论是在窗体内还是在窗体外鼠标滚轮都会对窗体中内容进行缩放。解决方法是可以通过窗体的MouseEnter事件和MouseLeave事件来对一个bool变量进行赋值更改,标识当前鼠标是否在窗体的范围内,以达到目的。也就是说增加变量inxna,使其在窗体外滚动鼠标滚轮时,不能起到放大缩小的功能.

除此之外还要说的一点是,触发鼠标的滚动事件后,处理事件的函数参数 MouseEventArgs e 中有个Delta属性,默认情况下向上滚动e.Delta == 120,向下滚动e.Delta == -120。

完整的程序代码如下:

1 public partial classShow_3D : Form2 {3 publicShow_3D()4 {5 InitializeComponent();6

7 //lxw0109 201303148 //Show_3D窗体中鼠标滚轮实现缩放的处理

9 this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.Show_3D_MouseWheel);10 }11 //lxw0109 2013031412 //通过滚轮实现放大缩小的更改

13 private void Show_3D_MouseWheel(objectsender, MouseEventArgs e)14 {15 if(Global.inxna)16 {17 float Mo = 0;18 if (e.Delta > 0)19 {20 Mo = 8;21 }22 else

23 {24 Mo = -8;25 }26 if (Global.myCamera.cameraPosition.Y < 90.0f)27 {28 Global.myCamera.cameraPosition += 0.01f * Mo * (Global.myCamera.cameraTarget -Global.myCamera.cameraPosition);29 }30 else

31 {32 Global.myCamera.cameraPosition.Y = 89.0f;33 }34 }35 }36

37 private void Show_3D_MouseEnter(objectsender, EventArgs e)38 {39 //lxw0109 20130314 滚轮缩放

40 Global.inxna = true;41 this.Focus();42 ...43 }44

45 private void Show_3D_MouseLeave(objectsender, EventArgs e)46 {47 //lxw0109 20130314 滚轮缩放

48 Global.inxna = false;49 ...50 }51 ...52 }

View Code

20130327 补充:

上次做的这个是Form窗体,所以其实在上面的代码中及时不写this.Focus();这行代码也是可行的!但最近我处理了一个Panel控件捕获鼠标滚轮消息处理缩放的问题:

由于panel控件(此处假设控件名称为XNAPanel,并且增加了相关的消息处理函数如:XNAPanel_MouseEnter(),XNAPanel_MouseWheel()等,具体方法和上面的一样)默认不能获得焦点,所以不能够捕获鼠标,这时就必须要增加获取焦点的代码.

因此,需要在XNAPanel_MouseEnter() 或者 XNAPanel_MouseClick()中增加如下的代码:

1 this.XNAPanel.Focus();

View Code

java mousewheel_鼠标滚轮实现窗体图形缩放MouseWheel相关推荐

  1. java响应鼠标滚轮事件_鼠标滚轮事件MouseWheel

    其实在大多数浏览器(IE6, IE7, IE8, Opera 10+, Safari 5+,Chrome)中,都提供了 "mousewheel" 事件.但杯具的是 Firefox ...

  2. 【C#】C#实现鼠标滚轮的图像居中缩放

    [fishing-pan:https://blog.csdn.net/u013921430 转载请注明出处]   最近接触了一下C# 的内容,遇到一个需求,就是关于图像的的缩放.查找了网上的一些资源, ...

  3. Python+matplotlib响应鼠标滚轮事件调整图形大小

    2021年全国高校Python课程高级研修班(线上) 中国大学MOOC"Python程序设计基础"第4次开课 推荐图书: <Python程序设计(第3版)>,(ISBN ...

  4. 鼠标滚轮实现图片的缩放-------Day79

    今天是7月的最后一天了,不得不说,我定下的七月份剩余几天的计划是完不成了,一则工作确实紧了些,再则没能处理好生活.工作和学习的节奏,这才是人生最大的课题吧,不过也还好,至少自己还在坚持着,其实真的越来 ...

  5. unity 如何使用鼠标滚轮进行物体的缩放

    当我们进行鼠标滚轮进行滑动时,会返回一个float的值, 当鼠标滚轮向前进行滑动时 返回的float值是>0的,        当鼠标滚轮向后进行滑动时 返回的float值是<0的   所 ...

  6. Cesium 鼠标滚轮事件获取地图缩放等级

    const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); //监听鼠标滚轮事件handler.setInputA ...

  7. java响应鼠标滚轮事件_一文读懂鼠标滚轮事件(wheelEvent)

    最近在用VUE写一个后台管理系统,顶部标签页涉及鼠标滚轮事件,由于每个浏览器对滚轮事件的处理方式不一样,个人对这个又不懂,折腾了很久,参考了大神的代码,也把百度翻烂了,找到了一篇陈旧的博文(其实是主题 ...

  8. PyQT5 实现滑动鼠标滚轮进行图片的缩放

     ImageBox是图像绘制类,主要进行图像绘制. # -*- coding: utf-8 -*-import sys from PyQt5 import QtCore, QtGui, QtWidge ...

  9. java响应鼠标滚轮事件_javascript滚动条响应鼠标滑轮的实现上下滚动事件

    实现鼠标滚动滚轮事件: var scrollFunc=function(e){ e=e || window.event; if(e.wheelDelta){//IE/Opera/Chrome if(e ...

最新文章

  1. 360修复高危漏洞可以修复吗_360代码卫士助D-LINK修复多个高危漏洞
  2. 如何正确访问 redis 中的海量数据?避免事故产生
  3. 机器学习理论《统计学习方法》学习笔记:第二章 感知机
  4. 二叉树叶子节点迭代器
  5. Mysql 常用函数(19)- mod 函数
  6. 原来Github上也有这么多的JavaScript学习资源!
  7. c语言删除文件remove_Python中的文件和目录操作
  8. 为什么清华、北大、麻省理工硕博士,都要逐步推导机器学习算法?
  9. React Native Styling:样式化的组件,Flexbox布局等
  10. 入门机器学习(二十)--编程作业-异常检测和推荐系统(Python实现)
  11. java 柯里化_函数式编程(Java描述)——Java中的函数及其柯里化
  12. 计算机指令就是一串开关吗,什么是非法关机?常按计算机开关,还是直接拔掉电源插头才算啊?...
  13. The Economist经济学人是如何使用Go语言构建内容平台微服务架构的?
  14. Selenium Grid- 让自动化分布式执行变得可能
  15. 由scanf说起之1:scanf函数和回车、空格 及其返回值
  16. 【转】阿里去IOE运动
  17. oracle阿拉伯数字转换成汉字,一个阿拉伯数字转中文数字的函数
  18. springboot 图片大小压缩
  19. Java语言知识大盘点(期末总复习)三
  20. CSS 实现面包屑导航

热门文章

  1. Linux stat命令Blocks字段与IO Block字段的理解
  2. css3盒子模型微课_css3之盒模型
  3. courgette(小胡瓜)测试报告
  4. 领铠服务器没有角色信息,王者荣耀英雄印记赠送功能出bug没显示怎么办 铠的印记消失出bug什么情况...
  5. C#删除目录和目录下的所有文件
  6. bitnami redmine mysql_Bitnami Redmine相关配置
  7. 自从用了这款神器,我的PPT课件居然只花20分钟就做完了
  8. 八位阿里大牛耗时三年总结出Java面试复盘手册!带你实现逆风翻盘
  9. 【Java】输入—Scanner用法(全)
  10. README 文件格式(详细好用)