Excerpt
先说下下面的代码和demo是wpf的,如果winform要用,改动不大的。 实现思路: 通过定时刷新鼠标位置 和 窗体坐标 进行计算 来控制窗体的隐藏 显示 代码都有详细的注释
先说下下面的代码和demo是wpf的,如果winform要用,改动不大的。
实现思路: 通过定时刷新鼠标位置 和 窗体坐标 进行计算 来控制窗体的隐藏 显示
代码都有详细的注释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| <span>//</span><span>窗体状态 true为显示 false为隐藏</span> <span>private</span> <span>bool</span> IsHide = <span>false</span><span>; </span><span>//</span><span>鼠标状态 true为进入窗体 false为离开窗体</span> <span>private</span> <span>bool</span> IsMouseEnter = <span>false</span><span>; </span><span>//</span><span>计时器 通过win32api实时获取鼠标位置</span> <span>private</span><span> Timer timer;
</span><span>public</span><span> MainWindow() { InitializeComponent(); timer </span>= <span>new</span><span> Timer(); timer.Interval </span>= <span>300</span><span>; timer.Tick </span>+= <span>new</span><span> EventHandler(timer_Tick); }
</span><span>void</span> timer_Tick(<span>object</span><span> sender, EventArgs e) { MousePosition.CurrentPoint point; MousePosition.MouseMove(</span><span>out</span><span> point); </span><span>//</span><span>判断鼠标是否进入窗体</span> <span>if</span> (point.X >= <span>this</span>.Left && point.X <= <span>this</span>.Left + <span>this</span>.Width&&point.Y>=<span>this</span>.Top&&point.Y<=<span>this</span>.Top+<span>this</span><span>.Height) { </span><span>//</span><span>鼠标在窗体内部</span> IsMouseEnter = <span>true</span><span>; } </span><span>else</span><span> { </span><span>//</span><span>鼠标离开窗体</span> IsMouseEnter = <span>false</span><span>; }
</span><span>//</span><span>判断窗体是否在隐藏状态</span> <span>if</span><span> (IsHide) { </span><span>//</span><span>如果在隐藏状态 且 横坐标在窗体横坐标方位 纵坐标小于等于20 则显示窗体 并把窗体状态设置为显示</span> <span>if</span> (point.X >= <span>this</span>.Left && point.X <= <span>this</span>.Left + <span>this</span><span>.Width) { </span><span>if</span> (point.Y <= <span>20</span><span>) { </span><span>this</span>.Top = <span>0</span>;<span>//</span><span>显示窗体</span> IsHide = <span>false</span>;<span>//</span><span>把窗体状态设置为显示</span> <span> } } } </span><span>else</span><span> { </span><span>//</span><span>如果在显示状态 且纵坐标小于等于20 切鼠标不在窗体内 则隐藏窗体</span>
<span>if</span> (<span>this</span>.Top <= <span>20</span> && !<span>IsMouseEnter) { </span><span>this</span>.Top = <span>0</span> - <span>this</span>.Width;<span>//</span><span>隐藏窗体</span> IsHide = <span>true</span><span>; } } }
</span><span>private</span> <span>void</span> Window_Loaded(<span>object</span><span> sender, RoutedEventArgs e) { timer.Start(); }</span>
|