C#.WinForm下悬挂窗口的简易实现
前两天在工作中用C#实现了一个WinForm下的悬挂窗口;
之前在网上搜索了几下,没有发现类似的说明,特在此记录一下。
特别说明:所谓悬挂窗口,就是类似QQ聊天工具的一个功能,当窗口放到桌面的上边界时自动收缩成一个小条隐藏起来;而一旦鼠标再次接触到上述边界的时候,窗口又会自动展开。
实现方法有两类,一是窗口内实现悬挂,在窗口内创建一个小的Panel,正常时不可见,在悬挂是显示,
悬挂时设置窗口标题栏不显示和窗口高度为该Panel高度;二是单独窗口悬挂,创建新的窗口作为悬挂时的显示条,同时隐藏掉主窗口。
一、窗口内实现悬挂
在LocationChanged事件内判断是否到桌面上边界,通过定时器判断当前鼠标位置
(System.Windows.Forms.Control.MousePosition)是否离开窗口区域,或者进入窗口区域。
实现代码。
二、单独窗口悬挂
本来不想考虑第二种方式的,但是后来发现需要悬挂的窗口设置高度居然无效,是一个从DevComponents.DotNetBar.Office2007RibbonForm继承的窗口类。
实现思路基本一样,只是需要注意的是判断当前鼠标的位置需要分不同的窗口转换坐标,还有其他细节见代码。
定义变量:
bool m_bXuanGua = false; //窗体是否处在悬挂状态
HideFlagForm m_HideFlagForm = new HideFlagForm(); //悬挂标志窗口
主要方法:
/// <summary>
/// 窗口位置被拖动的响应事件
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余4页未读,立即下载