c# winform 如何用鼠标滚轮改变pictureBox中图片的大小`?[问题点数:100分,结帖人: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;}
我这样写一点反映也没有 请教大家了 | | | |
|
| #1楼 得分:1回复于:2008-09-16 16:11:36 |
|
- 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; }
再试试吧,呵呵。 | |
|
|
| #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 |
|
- phy
- (被爱捶死 http://www)
- 等 级:
| #5楼 得分:1回复于:2008-09-16 16:26:51 刚才试了一下还有一个方便点的。 1:设置Image属性; 2:调整Sizemode为Zoom;
在事件响应中不需要同时调整高和宽了,只需要调整一个即可。(你根据需要自己确定,这种缩放会自动保持比例)。 这个方案要好得多。
需要的话发消息给我我可以发我的测试代码给你。 | |
|
|
| #6楼 得分:1回复于:2008-09-16 16:29:54 自己重写PictureBox的Paint过程就行了 Image用Graphics画上去,如果缩放,完全自己控制 在PictureBox的MouseWheel事件中,计算出图像的尺寸,然后让PictureBox Invalidate | |
|
|
| #7楼 得分:1回复于:2008-09-16 16:30:16 |
|
| #8楼 得分:1回复于:2008-09-16 16:35:50 |
|
| #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 | |
|
|
| #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); }
| |
|
|
| #12楼 得分:1回复于:2008-09-16 17:07:11 当鼠标在窗体上滚动时,使用WindowFromPoint判断当前坐标的句柄,用来判断鼠标是不是在pictureBox1上滚动的 然后判断e.Delta
我想 应该可以结帖了
今天的结帖率很低
| |
|
|
| #13楼 得分:1回复于:2008-09-16 17:14:49 |
|
| #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,我希望图片在放大缩小过程中,一直都是居中的状态,现在是默认在左上角了 |
|
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。