问题描述: 想在.Net下实现对一些非规则窗体,没有Caption,FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;窗体的拖拽,最小化,最大化,特殊操作的实现(如图1所示)。在黄色的区域即区域1里实现对窗体的拖拽操作,在橙色区域即区域2里实现对窗体的最小化操作,在蓝色区域即区域3里实现对窗体的关闭操作,在绿色区域即区域4里实现对窗体的特殊操作(如双倍窗体)。
(图1)
问题实现: 第一种方法: 添加Label为Label添加Click事件。(如图2所示) 如果要用这种方法实现,就要为每一个颜色区域进行切图,并要保证有正确的切图长和宽,然后设置Label的背景为这个图片。
(图2) 处理他们的Click事件,拖拽处理MouseDown MouseUp事件。 第二种方法: 不添加Label只处理鼠标事件,判断鼠标的位置然后决定执行什么操作,这种方法很耗费资源,每次鼠标点击就要判断,鼠标是否在某个区域然后决定是否要处理。不过这个处理用多态包装了。程序看起来比较整齐。
//定义常量 private Point point; private const int dragMove=172; private const int dragMin=72; private const int dragClose=72; private const int dragDouble=78; private const int dragHeight=29; private MouseHandleEnum dragEnum; //定义MouseDown事件 private void DragMain_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { point.X=e.X; point.Y=e.Y; if(e.Y<dragHeight) { if(e.X<dragMove) { dragEnum = MouseHandleEnum.Move; return; } if(e.X<dragMove+dragMin) { dragEnum = MouseHandleEnum.Min; return; } if(e.X<dragMove+dragMin+dragClose) { dragEnum = MouseHandleEnum.Close; return; } if(e.X<dragMove+dragMin+dragClose+dragDouble) { dragEnum = MouseHandleEnum.Double; return; } } } //定义MouseUp事件 private void DragMain_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { point.X=e.X-point.X; point.Y=e.Y-point.Y;
复制本页网址和标题,发送给你QQ/Msn的好友一起分享
上一篇:ASP.NET 2.0 缓存翻译草稿
下一篇:四种进程或线程同步互斥的控制方法