wpf 判断鼠标在一段时间内是否移动
有触摸屏,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();
}
}
}
}
}
wpf 判断鼠标在一段时间内是否移动的更多相关文章
- 在WPF中弹出右键菜单时判断鼠标是否选中该项
和上篇在WPF的TreeView中实现右键选定一样,这仍然是一个右键菜单的问题: 这个需求是在一个实现剪贴板的功能的时候遇到的:在弹出右键菜单时,如果菜单弹出位置在ListViewItem中时,我 ...
- WPF 使用鼠标拖动一个控件的实现[2018.7.15]
原文:WPF 使用鼠标拖动一个控件的实现[2018.7.15] Q:已经把一个Shape和一个TextBlock组合起来放到了一个Grid中,现在想要实现用鼠标拖动这个Grid到任意位置的功能,如何做 ...
- [WPF]自定义鼠标指针
原文:[WPF]自定义鼠标指针 [WPF]自定义鼠标指针 周银辉 看看WPF Cursor类的两个构造函数吧: * f)); g.Flush(); g.D ...
- JS判断鼠标进入容器方向的方法和分析window.open新窗口被拦截的问题
1.鼠标进入容器方向的判定 判断鼠标从哪个方向进入元素容器是一个经常碰到的问题,如何来判断呢?首先想到的是:获取鼠标的位置,然后经过一大堆的if..else逻辑来确定.这样的做法比较繁琐,下面介绍两种 ...
- js判断鼠标是否停止移动
本程序实现当鼠标在一个特定的div内悬停n秒时,判断出已经停止移动. 思路: 1.定义全局变量鼠标移动状态imouse,定时器timer.当鼠标在div内移动时,imouse值为1,相反静止时值为0: ...
- js判断鼠标向上滚动并浮动导航
<div id="Jnav"> <ul class="nav"> <li><a href="#"& ...
- storm入门(二):关于storm中某一段时间内topN的计算入门
刚刚接触storm 对于滑动窗口的topN复杂模型有一些不理解,通过阅读其他的博客发现有两篇关于topN的非滑动窗口的介绍.然后转载过来. 下面是第一种: Storm的另一种常见模式是对流式数据进行所 ...
- JS判断鼠标移入元素的方向
最终效果 这里的关键主要是判断鼠标是从哪个方向进入和离开的 $("li").on("mouseenter mouseleave",function(e) { v ...
- Matlab判断鼠标移动
set(gcf,'WindowButtonMotionFcn',@get_cur_positon); 其中第二项是判断鼠标移动的属性参数,第三项为回调函数 et. main.m clear;clc;s ...
随机推荐
- IE9下不显示select
由于IE8和IE9下不兼容,需要在头部加入: <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7&q ...
- OCulus Rift 游戏开发六原则
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/46685477 作者:car ...
- Satisfying memory ordering requirements between partial reads and non-snoop accesses
A method and apparatus for preserving memory ordering in a cache coherent link based interconnect in ...
- 【55.70%】【codeforces 557A】Ilya and Diplomas
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- Gradle自己定义插件
Gradle自己定义插件 在Gradle中创建自己定义插件,Gradle提供了三种方式: 在build.gradle脚本中直接使用 在buildSrc中使用 在独立Module中使用 开发Gradle ...
- printk()函数的总结
我们在使用printk()函数中使用日志级别为的是使编程人员在编程过程中自定义地进行信息的输出,更加容易地掌握系统当前的状况.对程序的调试起到了很重要的作用.(下文中的日志级别和控制台日志控制级别是一 ...
- 【34.88%】【codeforces 569C】Primes or Palindromes?
time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【u208】修复公路
Time Limit: 1 second Memory Limit: 128 MB [问题描述] A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 给出A地区的村庄数 ...
- 【codeforces 750E】New Year and Old Subsequence
time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 开源:通用的日志分析工具(LogViewer)
工具介绍 本工具最早是制作出来查看我的 FTL(Fast Trace Log) 二进制日志文件的, 后来因为去做Java后台,经常看 SpringBoot, Tomcat 等的日志, 就简单重构了一下 ...