曾经在学习WPF的情况下,用过一个编写XAML的小工具Kaxaml,觉得这个小工具的关闭按钮挺不错的,如下图所示:
为了练习GDI+,用代码实现了这个效果。虽然可能不是100%很像,但是从学习的角度来数,我觉得还算满意了。
代码如下:
首先需要绘制一个关闭按钮,代码如下:
/// <summary>
/// 关闭按钮
/// </summary>
///
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]);
}
用专门的一个方法来绘制底纹的圆形图案:
/// <summary>
/// 底纹圆
/// </summary>
///
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();
}
至此,一个关闭按钮控件实现了。
源代码下载
分享到:
相关推荐
4. **使用GDI+**:使用GDI+时,你需要包含`Gdiplus.h`,然后在代码中初始化GDI+,如`GdiplusStartup`函数,之后可以创建图形对象,如`Graphics`、`Bitmap`、`Pen`、`Brush`等,并调用相应的绘图方法。GDI+支持绘制...
Visual C++6.0使用GDI+的一般方法 1. 载解压GDI+开发包; 2. 正确设置include & lib 目录; 3. stdafx.h 添加: #ifndef ULONG_PTR #define ULONG_PTR unsigned long* #endif #include 或者 将Visual...
2. **初始化GDI+**:在VB6中使用GDI+之前,必须对GDI+进行初始化,这通常通过调用`GdipStartup`函数来完成。初始化完成后,可以开始使用GDI+的各种功能。 3. **创建Graphics对象**:Graphics对象是GDI+的核心,...
GDI+是微软公司提供的一套图像处理和图形输出的编程接口,它是基于类的应用程序编程接口(API),专门针对C/C++开发者使用。GDI+的全称为Graphical Device Interface Plus,是在GDI基础上的增强版,用于管理Windows...
### Visual Studio 2008中使用GDI+ (gdiplus的配置) #### 引言 在开发图形用户界面应用程序时,使用图形设备接口(Graphics Device Interface, GDI)和GDI+是非常常见的做法。GDI+是Microsoft提供的一种绘图API,...
GDI+程序设计是一门专门研究如何利用GDI+进行图形编程的技术,本书《GDI+程序设计》由Eric White所著,主要针对中高级C#程序员,旨在指导读者如何使用GDI+编写Windows Forms和Web Forms自定义控件。 书中详细介绍了...
GDI+(Graphics Device Interface Plus)是Windows操作系统中用于图形绘制和图像处理的一个强大的API,它是GDI(Graphics Device Interface)的升级版本。GDI+提供了丰富的绘图功能,包括二维几何图形、曲线、文本、...
GDI+,全称Graphics Device Interface Plus,是微软在Windows操作系统中引入的一种先进的图形处理工具,是对原有GDI(Graphics Device Interface)的升级版本。GDI+为开发者提供了丰富的API接口,用于处理二维矢量...
在实际编程中,GDI+通常与Windows API或.NET Framework中的控件结合使用,如Form、PictureBox等。通过编写代码,开发者可以实现动态图形绘制、动画效果、用户界面定制等功能。 学习GDI+程序设计,你需要掌握C++或C#...
本书适合于开发GDI+图形应用程序的初、中级程序员阅读,书中给出了大量用C#语言编写的可重用示例代码,可以使读者更快地掌握书中所介绍的各种知识和概念。本书也可以作为大专院校相关课程的重要辅导教材。 【编辑...
在描述中提到的“btn项目为GDI按钮重绘,btnDemo为GDI+按钮重绘”,这表明存在两个不同的示例项目,一个是使用GDI进行按钮的重绘,另一个则是用GDI+实现。在MFC中,可以通过覆盖CButton的OnPaint成员函数,使用...
在本文中,我们将深入探讨如何使用GDI+(Graphics Device Interface Plus)在Windows Forms应用程序中绘制动态曲线图。GDI+是.NET Framework提供的一种强大的图形处理API,它允许程序员创建和控制各种图形元素,包括...
4. **图形变换**:GDI+支持缩放、旋转、平移等图形变换操作,使得开发者可以在VB6中轻松实现动态的图形效果,如旋转按钮、放大镜效果等。 5. **抗锯齿处理**:GDI+提供抗锯齿绘制,使图形边缘更加平滑,提高了图像...
在使用.NET Framework进行Windows应用程序开发时,可能会遇到一个常见的错误提示:“A generic error occurred in GDI+”。这个异常通常在处理图像、图形或者打印任务时出现,涉及到GDI+(Graphics Device Interface...
在本文中,我们将深入探讨如何使用Delphi集成开发环境结合GDI+库来创建具有任意图片形状的不规则窗体。GDI+是Microsoft提供的一个图形设备接口,它扩展了传统的GDI功能,使得开发者可以更方便地进行图形绘制和处理。...
GDI+开发的帮助文档,讲得清晰浅显,而且是中文的.如果学习GDI+开发的话,特别是初学者,强烈推荐下载. 对于初学者,还有一个问题就是,如果想要进行GDI+开发, 需要下载一个GDI+的开发包(SDK). 网上搜到的一般只包含一个...
第四部分讲述了GDI+功能在Web应用程序中的使用,如在Internet上提供GDI+图像、创建***服务器控件和使用GDI+创建Web服务等。这部分内容是将GDI+编程技能拓展到Web开发领域的关键指导。 书中还提供了一些示例代码,...