C#在Win10与非Win10 Windows系统鼠标滚动编程的一点区别。

C#在win10和非Win10上处理鼠标滚动有一些区别,建一个Form1,放置一个FlowLayoutPanel ,类型的Panel1

Panel.MouseWheel += PanelOnMouseWheel;

private void PanelOnMouseWheel(object sender, MouseEventArgs mouseEventArgs)
 {
     if (mouseEventArgs.Delta < 0)
             ScrollBar.Value = ScrollBar.Value == ScrollBar.Maximum ? ScrollBar.Maximum : ++ScrollBar.Value;
         else
             ScrollBar.Value = ScrollBar.Value == ScrollBar.Minimum ? ScrollBar.Minimum : --ScrollBar.Value;

 }

以上代码在win10上,只要鼠标在Panel1客户区范围内,那么滚动鼠标滚轮时,就能触发滚动事件,但是在非win10上,如果焦点不在Panel上,比如在Form1窗体一个Button上,那么就不能触发滚动事件。

解决办法

        [DllImport("user32.dll")]
        public static extern IntPtr GetFocus();

需要判断焦点按钮是否是本窗口子控件,使用IMessageFilter。

       const int WM_MOUSEWHEEL = 0x020A;
        public bool PreFilterMessage(ref Message msg)
        {

            if (msg.Msg == WM_MOUSEWHEEL)
            {
                if ((CheckControl(this.Parent, GetFocus())))
                {
                    int wpara = (int)msg.WParam;
                    if ((wpara & 0x80000000) == 0x80000000)//向下
                        ScrollBar.Value = ScrollBar.Value == ScrollBar.Maximum ? ScrollBar.Maximum : ++ScrollBar.Value;
                    else
                        ScrollBar.Value = ScrollBar.Value == ScrollBar.Minimum ? ScrollBar.Minimum : --ScrollBar.Value;

                }
                return false;
            }
            return false;
        }
public bool CheckControl(Control control, IntPtr handle)
        {
            if (control == null)
                return false;
            try
            {
                for (int i = 0; i < control.Controls.Count; i++)
                {
                    var v = control.Controls[i];
                    if (handle == v.Handle)
                    {
                        return true;
                    }
                    else
                    {
                        if (v.Controls.Count > 0)
                        {
                            if (CheckControl(v, handle))
                            {
                                return true;
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return false;
            }
            return false;
        }

如果有更好的解决办法请指点。

原文地址:https://www.cnblogs.com/zhaogaojian/p/8521928.html

时间: 2024-10-10 08:40:52

C#在Win10与非Win10 Windows系统鼠标滚动编程的一点区别。的相关文章

WIN10删除非系统用户的用户文件夹

::------------------WIN10删除非系统用户的用户文件夹------------------ ::实际使用时可以删除类似 "echo 1没有删除Administrator >>C:\系统用户.txt" 的测试提示语句 @echo off del C:\系统用户.txt del C:\删除的用户.txt setlocal enabledelayedexpansion for /f "delims=" %%i in ('dir /a-o/

更改Windows系统时间同步频率【windows 7,windows 8,win10】

Windows系统默认的时间同步间隔是7天,如果我们需要修改同步的时间间隔(同步频率),我们可以通过修改注册表来手动修改它的自动同步间隔以提高同步次数,保证时钟的精度,windows7,Windows8 系统:     1. 在“运行”框输入“Regedit”进入注册表编辑器     2. 展开 [ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient ] 分支,并双击 Speci

UEFI+GPT安装WIN7,WIN8/WIN10下安装WIN7双系统

一.BIOS更改 首先来bios更改:我们知道,uefi+gpt引导虽然出来的时间比较长,但是win7还不能完全的支持,所以在使用uefi+gpt安装win7的时候就会出现各种错误!所以我们在安装Windows 7的时候,不能把BIOS设置为“纯UEFI”,并且必须禁用“Secure Boot”.下面我们说说设置,主要有如下设置: 设置:EFI BIOS:BootMode [UEFI/Legacy],设置为UEFI: Launch CSM [Enabled/Disabled],设置为Disabl

win10安装ubuntu16.4双系统

一.准备工作 下载ubuntu系统镜像文件,地址:http://cn.ubuntu.com/download/,我安装的是"优麒麟 16.04 LTS(长期支持)版本",下面也是以这个版本为例的 制作U盘启动器. 制作UP启动的工具有很多,我用的是软碟通 软碟通操作如下: 文件->打开,选择之前下载的镜像文件 启动->写入硬盘镜像 "硬盘驱动器"选择你的U盘(需要格式化一下),"写入方式"一般选择"USB-HDD+"

安装win10与ubuntu16.04双系统

参考教程: https://jingyan.baidu.com/article/fedf0737552c5635ac8977ef.html https://jingyan.baidu.com/article/3c48dd348bc005e10be358eb.html 按照网上的说法,要先安装windows系统,然后再安装ubuntu系统,这样磁盘引导管理工具才能正常的工作. 一: 安装win10系统 1. MediaCreationTool官方工具 去"微软中国下载中心"下载win10

win10安装ubuntu16.04双系统

前话:因为感兴趣吧也是专业需要,所以自学了U盘重装系统以及在win10的情况下安装Ubuntu16.04双系统.借此博客,记录下我安装Ubuntu的过程,方便日后回忆. 正因如此,本篇博客会写的十分简略,如有不便请见谅. 如果你是一位新手,推荐一位大神的博客. http://www.cnblogs.com/Duane/p/5424218.html 补充知识点:关于磁盘使用GUID格式分区和MBR格式分区 当你使用DiskGenius分区工具快速分区时,会让你选择要哪一种分区格式,如下图 这两种分

2019.7.01—双硬盘安装Win10,Ubuntu18.04双系统(包括Ubuntu系统美化;安装QQ,微信;配置酸酸.乳)

这篇文章侧重于介绍双系统中Ubuntu系统的安装与配置,windows系统的安装较略.有些方法可能对你的机器不管用,那就要自行百度啦(^_^). 先放一张Ubuntu系统的成品照: 本人电脑配置情况:华硕w50j(老机器了= =),12g内存,500G固态硬盘+1T机械硬盘 总体目标:不使用任何第三方装机软件完成Win10及Ubuntu18.04纯净系统的安装,并完成Ubuntu系统的相关配置. 具体目标:固态中分350g给windows用于安装系统,其余用于安装Ubuntu系统:机械盘中分60

win10与ubuntu16.04双系统的安装和配置

最近和ubuntu打了几天架..现在算是初步装好了 本来打算用硬盘安装,EasyBCD引导,但是试了试发现坑太多,并且安装很不方便,于是最后弃疗了QAQ U盘引导: 1.腾出磁盘空间:右键‘我的电脑’点击‘管理’,选择磁盘管理.选择一个空间大一些的磁盘,右键,压缩卷,给ubuntu腾出至少50G(51200M)内存 2.刻录u盘 3.按Del键或F2等等进入BIOS,选择U盘启动 4.进入安装界面,安装过程就很简单了.因为是安装双系统, 记得选择‘与win10共存’ PS:勾掉‘安装ubuntu

win10下安装win7双系统

win10下安装win7双系统 相信很多人和博主一样,心血来潮就升级了win10(要不就被强制升级了),但是当我们做开发的,渐渐就发现问题了,各种开发软件各种不兼容(ietexter.myeclipse等)不要问博主是怎么知道的说起来都是泪啊!还有,身为一个骨灰级游戏玩家,看着那FPS简直就是惨不忍睹!咳咳,好像扯远了,接下来就进入咱们的正题-- 准备材料: 启动盘一个(U盘,移动硬盘什么的都可以,只要是启动盘就行,网上好多启动盘制作教材,在这里博主就不仔细阐述了) win7镜像文件一份 操作过