wpf 判断鼠标在一段时间内是否移动

简介: 原文:wpf 判断鼠标在一段时间内是否移动 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/config_man/article/details/7484257 ...
原文: wpf 判断鼠标在一段时间内是否移动

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/config_man/article/details/7484257
有触摸屏,xp系统,代码:

方法一:

    class Win32
    {
        [StructLayout(LayoutKind.Sequential)]
        public struct POINT
        {
            public int X;
            public int Y;

            public POINT(int x, int y)
            {
                this.X = x;
                this.Y = y;
            }
        }

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern bool GetCursorPos(out POINT pt);
    }

    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        int x, y;
        DispatcherTimer timer = new DispatcherTimer();

        public MainWindow()
        {
            InitializeComponent();
            setButtonStyle();

            timer.Tick += new EventHandler(timer_Tick);
            timer.Interval = new TimeSpan(0, 0, 10); //10秒后开始运行
        }

        void timer_Tick(object sender, EventArgs e)
        {
            Win32.POINT pi = new Win32.POINT();
            Win32.GetCursorPos(out pi);

            int _x = pi.X;
            int _y = pi.Y;

            if ((x + 4 == _x) && (y + 3 == _y))
            {
                timer.IsEnabled = false;

                if (MessageBoxResult.Yes == MessageBox.Show("确定退出吗?", "友情提示", MessageBoxButton.YesNo))
                {
                    this.Close();
                }
            }
        }

        //鼠标左键按下时
        private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            //鼠标按下时获取当前鼠标坐标
            x = (int)(Mouse.GetPosition(e.Source as FrameworkElement).X);
            y = (int)(Mouse.GetPosition(e.Source as FrameworkElement).Y);

            timer.IsEnabled = true;
        }
        //鼠标右键按下时
        private void Window_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            x = -1;
            y = -1;
            timer.IsEnabled = false;
        }
   }


方法二:

    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        int x, y;
        DispatcherTimer timer = new DispatcherTimer();
        DispatcherTimer timer2 = new DispatcherTimer();
        DateTime start;

        public MainWindow()
        {
            InitializeComponent();
            setButtonStyle();
            
            timer.Tick += new EventHandler(timer_Tick);
            timer.Interval = new TimeSpan(0, 0, 1);
            timer.Start();

            timer2.Tick += new EventHandler(timer2_Tick);
            timer2.Interval = new TimeSpan(0, 0, 2);
            timer2.Start();
        }

        void timer_Tick(object sender, EventArgs e)
        {
            timer.Stop();
            x = (int)(Mouse.GetPosition(this).X);
            y = (int)(Mouse.GetPosition(this).Y);
        }
        
        bool ff = true;
        void timer2_Tick(object sender, EventArgs e)
        {
            int _x = (int)(Mouse.GetPosition(this).X);
            int _y = (int)(Mouse.GetPosition(this).Y);

            if ((x == _x) && (y == _y) && ff)
            {
                start = DateTime.Now;
                ff = false;
            }
            if (x != _x || y != _y)
            {
                x = _x;
                y = _y;
                start = DateTime.Now;
                ff = true;
            }
            
            TimeSpan ts = DateTime.Now.Subtract(start);
            
            //鼠标或键盘误动作3分钟后开始播放视频
            if (ts.Minutes >= 3)
            {
                //MessageBox.Show("x:" + x.ToString() + ";y:" + y.ToString() + "\n _x:" + _x.ToString() + ";_y=" + _y.ToString()+"\n"+ff.ToString().ToString() + " " + ts.Hours.ToString() + " " + ts.Minutes.ToString() + " " + ts.Seconds.ToString());
                //关闭所有子窗体
                WindowCollection windows = Application.Current.Windows;
                foreach(Window window in windows)
                {
                    string title = window.Title;
                    if(title != "MainWindow")
                    {
                        window.Close();
                    }
                }
            }

        }
    }



目录
相关文章
|
前端开发 C# Windows
WPF鼠标、键盘、拖拽事件、用行为封装事件
本文主要介绍了WPF中常用的鼠标事件、键盘事件以及注意事项,同时使用一个案例讲解了拓展事件。除此之外,本文还讲述如何用行为(Behavior)来封装事件。
|
C#
C# WPF 中用代码模拟鼠标和键盘的操作
原文:C# WPF 中用代码模拟鼠标和键盘的操作   原文地址   C#开发者都知道,在Winform开发中,SendKeys类提供的方法是很实用的。
2211 0
|
C# Windows
C# WPF 实现鼠标固定在指定范围内运动
原文:C# WPF 实现鼠标固定在指定范围内运动   一.背景: 需要实现带有三个屏幕,三个屏幕分别显示窗体,但鼠标只能在主窗体中运动,不能移动到其他的两个附屏中。
1216 0
|
C#
WPF 获取鼠标屏幕位置、窗口位置、控件位置
原文:WPF 获取鼠标屏幕位置、窗口位置、控件位置 public struct POINT { public int X; public int Y; ...
1869 0
|
C# Windows
WPF 窗体中获取键盘和鼠标无操作时的超时提示
原文:WPF 窗体中获取键盘和鼠标无操作时的超时提示 通过调用Windows API中的GetLastInputInfo来获取最后一次输入的时间 using System;using System.
888 0
|
C#
WPF窗体隐藏鼠标光标的方法
原文:WPF窗体隐藏鼠标光标的方法 要引用 System.Windows.Input;   Mouse.OverrideCursor = Cursors.
1760 0
|
C#
用WPF实现在ListView中的鼠标悬停Tooltip显示
原文:用WPF实现在ListView中的鼠标悬停Tooltip显示 一、具体需求描述     在WPF下实现,当鼠标悬停在ListView中的某一元素的时候能弹出一个ToolTip以显示需要的信息。 二、代码实现 在.XMAL文件中   Code   在listview 元素中加入ItemContainerStyle="{StaticResource InfoTipStyle}" 如下所示代码: Code   三、心得     调用顺序就是listview呈现出预定的style, InfoTipStyle 调用声明好的tooltip。
1801 0
|
C#
【WPF】点击滑动条(Slider),移动滑块(Tick)到鼠标点击的位置
原文:【WPF】点击滑动条(Slider),移动滑块(Tick)到鼠标点击的位置 问题:点击Slider控件时,滑块会自动跳到滑动条的最边缘位置,无法跳到鼠标点击的位置上。 办法:给Slider控件设置属性IsMoveToPointEnabled="True"即可!   https://stackoverflow.
2065 0
|
C#
[WPF]自定义鼠标指针
原文:[WPF]自定义鼠标指针                                                        [WPF]自定义鼠标指针                                                               周银辉 ...
1116 0
|
C#
潜移默化学会WPF(转载篇)--屏幕显示Label,鼠标移上去变成textBox
原文:潜移默化学会WPF(转载篇)--屏幕显示Label,鼠标移上去变成textBox ...
1051 0