分享

c# winform 如何用鼠标滚轮改变pictureBox中图片的大小`?

 googo 2012-07-09

c# winform 如何用鼠标滚轮改变pictureBox中图片的大小`?[问题点数:100,结帖人:heisetoufa]

  • heisetoufa
  • (黑色头发)
  • 等 级:
  • 结帖率:
楼主发表于:2008-09-16 16:07:27
鼠标中键滚轮,向上滚动是放大图片,向下滚动是缩小图片

这个如何做呀

我找了好久也没找到滚轮事件

就找到个MouseWheel,可惜不会用

pictureBox1.MouseWheel += new MouseEventHandler(pictureBox1_MouseWheel); 

C# code
private void pictureBox1_MouseEnter(object sender, EventArgs e) { pictureBox1.MouseWheel += new MouseEventHandler(pictureBox1_MouseWheel); } private void pictureBox1_MouseWheel(object sender, MouseEventArgs e) { MessageBox.Show(e.Delta.ToString()); //this.pictureBox1.Width = 50; }


我这样写一点反映也没有

请教大家了
回复次数:27
  • ZengHD用户头像
  • ZengHD
  • (请输入您的社区昵称)
  • 等 级:
#1楼 得分:1回复于:2008-09-16 16:11:36
查查Windows消息
  • phy用户头像
  • phy
  • (被爱捶死 http://www)
  • 等 级:
#2楼 得分:84回复于:2008-09-16 16:21:56
呵呵,处理事件倒不是难点,问题在于似乎PictueBox不支持对其中Image对象的自动绽放。
其实我给你个简单方法:
1:添加一个PictureBox,注意:不要设置Image属性,设置Background属性,并且设置backgroudImagelayout为stretch。
2:给窗口添加mouse_wheel(注意不是给picturebox)。
3:内容如下:
C# code
//给窗口添加句柄。 this.MouseWheel += new MouseEventHandler(Form1_MouseWheel); void Form1_MouseWheel(object sender, MouseEventArgs e) { var t = pictureBox1.Size; t.Width += e.Delta; t.Height += e.Delta; pictureBox1.Size = t; }
再试试吧,呵呵。
  • cpio用户头像
  • cpio
  • (曾经真的以为人生就这样了)
  • 等 级:
#3楼 得分:1回复于:2008-09-16 16:24:35
主要是Picture控件得不到焦点,所以滚动没有效果

在它的MouseEnter事件里面设置它的焦点
  private void pictureBox1_MouseEnter(object sender, EventArgs e)
  {
  pictureBox1.Focus();
  }

  void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
  {
  double scale = 1;
  if (pictureBox1.Height > 0)
  {
  scale = (double)pictureBox1.Width / (double)pictureBox1.Height;
  }
  pictureBox1.Width += (int)(e.Delta * scale);
  pictureBox1.Height += e.Delta;
  }
#4楼 得分:1回复于:2008-09-16 16:25:41
xuexi
  • phy用户头像
  • phy
  • (被爱捶死 http://www)
  • 等 级:
#5楼 得分:1回复于:2008-09-16 16:26:51
刚才试了一下还有一个方便点的。
1:设置Image属性;
2:调整Sizemode为Zoom;

在事件响应中不需要同时调整高和宽了,只需要调整一个即可。(你根据需要自己确定,这种缩放会自动保持比例)。
这个方案要好得多。

需要的话发消息给我我可以发我的测试代码给你。
  • palmax用户头像
  • palmax
  • (说到做到,淡出CSDN~~)
  • 等 级:
#6楼 得分:1回复于:2008-09-16 16:29:54
自己重写PictureBox的Paint过程就行了
Image用Graphics画上去,如果缩放,完全自己控制
在PictureBox的MouseWheel事件中,计算出图像的尺寸,然后让PictureBox Invalidate
  • LQknife用户头像
  • LQknife
  • (安乃定:不吃头疼,吃了上瘾。)
  • 等 级:
#7楼 得分:1回复于:2008-09-16 16:30:16
晓习来了
  • blestcc用户头像
  • blestcc
  • (我穿墙而过)
  • 等 级:
#8楼 得分:1回复于:2008-09-16 16:35:50
結合3樓5樓的答案應該比較完美
  • fish_yht用户头像
  • fish_yht
  • (百行孝为先,万业勤为径。)
  • 等 级:
#9楼 得分:1回复于:2008-09-16 16:58:48
有个按钮事件
里面可以找到滚轮键值
捕捉键值进行处理就可以了
#10楼 得分:0回复于:2008-09-16 17:01:44
按照2楼的方法,鼠标滚动事件已经可以获得了

但是使用2楼和3楼的MouseWheel方法

都改变不了图片的大小

应该是因为我的Sizemode设置成了AutoSize

我要图片显示为原来的大小,如果是Zoom的话默认显示就小了,而已在滚动时图片不会居中

我需要图片在放大缩小中在panel中是居中变化的

5楼还有什么好方法``

可以发给我
chineselimeng@126.com
  • ZengHD用户头像
  • ZengHD
  • (请输入您的社区昵称)
  • 等 级:
#11楼 得分:1回复于:2008-09-16 17:04:43
C# code
如果没有解决的话,可以看看我的代码 [DllImport("user32.dll")] public static extern int WindowFromPoint(int xPoint, int yPoint); void Form1_MouseWheel(object sender, MouseEventArgs e) { System.Drawing.Point p= PointToScreen(e.Location); if (WindowFromPoint(p.X, p.Y) == pictureBox1.Handle.ToInt32()) { if (e.Delta == 120) { MessageBox.Show("向前"); } else if(e.Delta<0) { MessageBox.Show("向后"); } } } private void Form1_Load(object sender, EventArgs e) { this.MouseWheel += new MouseEventHandler(Form1_MouseWheel); }
  • ZengHD用户头像
  • ZengHD
  • (请输入您的社区昵称)
  • 等 级:
#12楼 得分:1回复于:2008-09-16 17:07:11
当鼠标在窗体上滚动时,使用WindowFromPoint判断当前坐标的句柄,用来判断鼠标是不是在pictureBox1上滚动的
然后判断e.Delta

我想
应该可以结帖了

今天的结帖率很低
#13楼 得分:1回复于:2008-09-16 17:14:49
调整Sizemode为Zoom
#14楼 得分:1回复于:2008-09-16 17:14:56
学习
#15楼 得分:1回复于:2008-09-16 17:37:04
要是简单点,可以这样来处理:
C# code
Image img = Image.FromFile(@"C:\Documents and Settings\All Users\Documents\My Pictures\示例图片\Water lilies.jpg"); private float scale = 1; protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); e.Graphics.ScaleTransform(this.scale, this.scale); e.Graphics.DrawImage(this.img, p); } protected override void OnMouseWheel(MouseEventArgs e) { base.OnMouseWheel(e); int wheels = e.Delta * SystemInformation.MouseWheelScrollLines / 120; scale -= wheels * 0.001f; this.Invalidate(); }
#16楼 得分:1回复于:2008-09-16 17:46:52
学习一下!!
#17楼 得分:0回复于:2008-09-16 17:58:24
有几个小问题

1,图片显示不显示在pictureBox里无所谓,主要是让图片可以放大或缩小,现在发现pb是放大缩小了,可图片大小没有变,需要图片改变大小

2,每次放大缩小我希望是20象素

3,我希望图片在放大缩小过程中,一直都是居中的状态,现在是默认在左上角了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多