先说下下面的代码和demo是wpf的,如果winform要用,改动不大的。
实现思路: 通过定时刷新鼠标位置 和 窗体坐标 进行计算 来控制窗体的隐藏 显示
代码都有详细的注释
//窗体状态 true为显示 false为隐藏 private bool IsHide = false; //鼠标状态 true为进入窗体 false为离开窗体 private bool IsMouseEnter = false; //计时器 通过win32api实时获取鼠标位置 private Timer timer; public MainWindow() { InitializeComponent(); timer = new Timer(); timer.Interval = 300; timer.Tick += new EventHandler(timer_Tick); } void timer_Tick(object sender, EventArgs e) { MousePosition.CurrentPoint point; MousePosition.MouseMove(out point); //判断鼠标是否进入窗体 if (point.X >= this.Left && point.X <= this.Left + this.Width&&point.Y>=this.Top&&point.Y<=this.Top+this.Height) { //鼠标在窗体内部 IsMouseEnter = true; } else { //鼠标离开窗体 IsMouseEnter = false; } //判断窗体是否在隐藏状态 if (IsHide) { //如果在隐藏状态 且 横坐标在窗体横坐标方位 纵坐标小于等于20 则显示窗体 并把窗体状态设置为显示 if (point.X >= this.Left && point.X <= this.Left + this.Width) { if (point.Y <= 20) { this.Top = 0;//显示窗体 IsHide = false;//把窗体状态设置为显示 } } } else { //如果在显示状态 且纵坐标小于等于20 切鼠标不在窗体内 则隐藏窗体 if (this.Top <= 20 && !IsMouseEnter) { this.Top = 0 - this.Width;//隐藏窗体 IsHide = true; } } } private void Window_Loaded(object sender, RoutedEventArgs e) { timer.Start(); }