用GDI+模仿Kaxaml的关闭按钮
来源:互联网 发布:淘宝广告法投诉处理 编辑:程序博客网 时间:2024/05/22 08:25
曾经在学习WPF的情况下,用过一个编写XAML的小工具Kaxaml,觉得这个小工具的关闭按钮挺不错的,如下图所示:
为了练习GDI+,用代码实现了这个效果。虽然可能不是100%很像,但是从学习的角度来数,我觉得还算满意了。
代码如下:
首先需要绘制一个关闭按钮,代码如下:
////// 关闭按钮/// /// private void CloseButton(Graphics g){ //Point组 绘制关闭按钮的两个叉 Point[] points = new Point[4]; /// points[0] = new Point(rect.X, rect.Y); points[1] = new Point(rect.Bottom, rect.Right); g.DrawLine(new Pen(new SolidBrush(ColorTable.CloseLineColor), 2.0f), points[0], points[1]); // / points[2] = new Point(rect.Right, rect.X); points[3] = new Point(rect.X, rect.Bottom); g.DrawLine(new Pen(new SolidBrush(ColorTable.CloseLineColor), 2.0f), points[2], points[3]);}
用专门的一个方法来绘制底纹的圆形图案:
////// 底纹圆 /// /// private void BottomClicle(Graphics g) { //绘制最底层的圆 using (LinearGradientBrush linearBrush = new LinearGradientBrush( rect, ColorTable.BottomCircleTopColor, ColorTable.BottomCircleBottmColor, LinearGradientMode.Vertical)) { g.FillEllipse(linearBrush, rect); } rect.Inflate(CircleSpace, CircleSpace); //绘制中间层的矩形 SolidBrush solidBrush = new SolidBrush(ColorTable.MiddleCircleColor); g.FillEllipse(solidBrush, rect); }
相应Paint事件:
Graphics g = e.Graphics; g.SmoothingMode = SmoothingMode.HighQuality; //指定绘制矩形的大小 rect = ClientRectangle; rect.Inflate(CircleSpace, CircleSpace); BottomClicle(g); //缩小4个像素 确定最上层的关闭按钮的区域 rect.Inflate(CloseSpace + CircleSpace, CloseSpace + CircleSpace); CloseButton(g);
MouseLeave事件:
private void CloseButtonEx_MouseLeave(object sender, EventArgs e) {
Invalidate();//强制刷新 }另外几个鼠标事件:
private void CloseButtonEx_MouseDown(object sender, MouseEventArgs e) { rect = ClientRectangle; rect.Inflate(-6, -6); Graphics g = this.CreateGraphics(); g.SmoothingMode = SmoothingMode.HighQuality; Color hoverColor = ColorTable.CloseHover; SolidBrush solidBrush = new SolidBrush(hoverColor); g.FillEllipse(solidBrush, rect); rect = ClientRectangle; rect.Inflate(-10, -10); Point loca = rect.Location; rect.Location = new Point(loca.X + 1, loca.Y + 1); CloseButton(g); } private void CloseButtonEx_MouseUp(object sender, MouseEventArgs e) { Invalidate(); } private void CloseButtonEx_MouseHover(object sender, EventArgs e) { rect = ClientRectangle; rect.Inflate(-6, -6); Graphics g = this.CreateGraphics(); g.SmoothingMode = SmoothingMode.HighQuality; Color hoverColor = ColorTable.CloseHover; SolidBrush solidBrush = new SolidBrush(hoverColor); g.FillEllipse(solidBrush, rect); Update(); }
至此,一个关闭按钮控件实现了。
源代码下载
- 用GDI+模仿Kaxaml的关闭按钮
- GDI+绘制一个关闭按钮
- 模仿Path菜单按钮的效果
- 模仿Path菜单按钮的效果
- 模仿Path菜单按钮的效果
- 带关闭按钮的js
- 禁止标题栏的关闭按钮
- C# 模仿玻璃按钮
- 模仿微信侧滑按钮
- 模仿单选按钮
- 模仿音乐播放器带进度的播放暂停按钮
- 【Unity】模仿GUILayout.SelectionGird绘制一组互斥的按钮
- iOS模仿安卓Material Design的涟漪动画按钮
- 关闭按钮
- 关闭按钮
- OpenCV学习——用Trackbar模仿一个按钮
- 创建支持更多图片格式的按钮 使用VC6和GDI+
- 利用GDI+制作背景颜色淡入淡出效果的按钮
- subversion安装及使用
- 解决httpd: Could not reliably determine the server's fully qualifi...
- USACO 1.2 两道题目
- zoj 1137 Girls and Boys(poj 1466)(最大独立点集)
- GDI+绘制验证码
- 用GDI+模仿Kaxaml的关闭按钮
- ibatis连接insert到mysql数据库主键自动返回
- PHP5的构造函数不自动调用
- 常用SQL语句大全
- CSDN虽好只是限制多了点。
- 共享库加载失败问题排查。gcc编译器生成共享库时不检查符号的依赖项。gcc编译器生成可执行程序时,会多链接一些无用的额库。
- 【叶子函数分享二十一】检查给定串是否存在于由区间及点集的结合内
- WshShell.Run方法说明
- C# 二维数组转换成DataTable