0%

wpf、winform仿QQ靠边隐藏 - 晓晨Master - 博客园

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 &gt;= <span>this</span>.Left &amp;&amp; point.X &lt;= <span>this</span>.Left + <span>this</span>.Width&amp;&amp;point.Y&gt;=<span>this</span>.Top&amp;&amp;point.Y&lt;=<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 &gt;= <span>this</span>.Left &amp;&amp; point.X &lt;= <span>this</span>.Left + <span>this</span><span>.Width)
{
</span><span>if</span> (point.Y &lt;= <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 &lt;= <span>20</span> &amp;&amp; !<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>