首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Control.MouseWheel事件

Control.MouseWheel事件
EN

Stack Overflow用户
提问于 2017-06-24 10:21:37
回答 1查看 2.7K关注 0票数 4

我创建了一个简单的应用程序,用鼠标轮放大图片框中的图像。它在我的开发笔记本电脑(Win10)上运行得很好。但是当我在台式机(Win7)上运行它时,缩放(使用鼠标轮)功能就不能工作了。

下面是我实现的片段:

代码语言:javascript
复制
        private void InitializeComponent()
    {
        this.pictureBox1 = new System.Windows.Forms.PictureBox();
        this.panel1 = new System.Windows.Forms.Panel();
        ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
        this.panel1.SuspendLayout();
        this.SuspendLayout();
        // 
        // pictureBox1
        // 
        this.pictureBox1.Location = new System.Drawing.Point(4, 0);
        this.pictureBox1.Margin = new System.Windows.Forms.Padding(4);
        this.pictureBox1.Name = "pictureBox1";
        this.pictureBox1.Size = new System.Drawing.Size(493, 583);
        this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
        this.pictureBox1.TabIndex = 0;
        this.pictureBox1.TabStop = false;
        this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
        this.pictureBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseDown);
        this.pictureBox1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseMove);
        this.pictureBox1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseUp);
        this.pictureBox1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseWheel);
        // 
        // panel1
        // 
        this.panel1.AutoScroll = true;
        this.panel1.AutoSize = true;
        this.panel1.Controls.Add(this.pictureBox1);
        this.panel1.Location = new System.Drawing.Point(1, 2);
        this.panel1.Name = "panel1";
        this.panel1.Size = new System.Drawing.Size(714, 593);
        this.panel1.TabIndex = 1;
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.AutoScroll = true;
        this.ClientSize = new System.Drawing.Size(719, 594);
        this.Controls.Add(this.panel1);
        this.Margin = new System.Windows.Forms.Padding(4);
        this.Name = "Form1";
        this.Text = "Form1";
        this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
        ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
        this.panel1.ResumeLayout(false);
        this.panel1.PerformLayout();
        this.ResumeLayout(false);
        this.PerformLayout();

    }

private float ZOOM = 1.5f
private void pictureBox1_MouseWheel(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        pictureBox1.Focus();
        if (e.Delta < 0) //ZoomIn
        {
            Console.WriteLine("Mouse Wheel Zoom In");

            if ((pictureBox1.Width < panel1.Width) && (pictureBox1.Height < panel1.Height))
            {
                pictureBox1.Width = Convert.ToInt32(pictureBox1.Width * ZOOM);
                pictureBox1.Height = Convert.ToInt32(pictureBox1.Height * ZOOM);
                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

                this.Refresh();                    
            }

        }
        else
        {
            //ZoomOut
            Console.WriteLine("Mouse Wheel Zoom Out");
            if ((pictureBox1.Width > panel1.Width) &&
            (pictureBox1.Height > panel1.Height))
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                pictureBox1.Width = Convert.ToInt32(pictureBox1.Width / ZOOM);
                pictureBox1.Height = Convert.ToInt32(pictureBox1.Height / ZOOM);
            }
        }
    }

我认为这是我的桌面PC上的Control.MouseWheel事件的问题所在。调试时,虽然我已经在图片框中聚焦或单击,但从未出现此事件。当我尝试通过过滤WM_MOUSEWHEEL = 0x20a;消息使用其他实现时,它在我的笔记本电脑和我的台式机上都能工作。知道为什么会发生这些不同的行为吗?谢谢您抽时间见我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-26 08:05:15

原来,Win 10有一个系统选项,名为“当我悬停在窗口上时,不活动的窗口”。这就是为什么我以前的代码只在Win 10机器上工作。我添加了下面的行来修复它。谢谢@HansPassant的提示。

代码语言:javascript
复制
    private void picBox_MouseHover(object sender, EventArgs e)
    {
        picBox.Focus();
    }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44735362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档