`
zzc125
  • 浏览: 13416 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用GDI+模仿Kaxaml的关闭按钮

WPF 
阅读更多

曾经在学习WPF的情况下,用过一个编写XAML的小工具Kaxaml,觉得这个小工具的关闭按钮挺不错的,如下图所示:

image

为了练习GDI+,用代码实现了这个效果。虽然可能不是100%很像,但是从学习的角度来数,我觉得还算满意了。

image

代码如下:

首先需要绘制一个关闭按钮,代码如下:

/// <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(); 
   }

至此,一个关闭按钮控件实现了。

源代码下载

分享到:
评论

相关推荐

    GDI+开发包 GDI+ SDK

    4. **使用GDI+**:使用GDI+时,你需要包含`Gdiplus.h`,然后在代码中初始化GDI+,如`GdiplusStartup`函数,之后可以创建图形对象,如`Graphics`、`Bitmap`、`Pen`、`Brush`等,并调用相应的绘图方法。GDI+支持绘制...

    GDI+开发包 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...

    VB6 GDI+入门教程(最新版)

    2. **初始化GDI+**:在VB6中使用GDI+之前,必须对GDI+进行初始化,这通常通过调用`GdipStartup`函数来完成。初始化完成后,可以开始使用GDI+的各种功能。 3. **创建Graphics对象**:Graphics对象是GDI+的核心,...

    GDI+教程(C++中文版).pdf

    GDI+是微软公司提供的一套图像处理和图形输出的编程接口,它是基于类的应用程序编程接口(API),专门针对C/C++开发者使用。GDI+的全称为Graphical Device Interface Plus,是在GDI基础上的增强版,用于管理Windows...

    Visual Studio 2008中使用GDI+ (gdiplus的配置)

    ### Visual Studio 2008中使用GDI+ (gdiplus的配置) #### 引言 在开发图形用户界面应用程序时,使用图形设备接口(Graphics Device Interface, GDI)和GDI+是非常常见的做法。GDI+是Microsoft提供的一种绘图API,...

    GDI+程序设计(清华大学)

    GDI+程序设计是一门专门研究如何利用GDI+进行图形编程的技术,本书《GDI+程序设计》由Eric White所著,主要针对中高级C#程序员,旨在指导读者如何使用GDI+编写Windows Forms和Web Forms自定义控件。 书中详细介绍了...

    GDI+图形程序设计.zip

    GDI+(Graphics Device Interface Plus)是Windows操作系统中用于图形绘制和图像处理的一个强大的API,它是GDI(Graphics Device Interface)的升级版本。GDI+提供了丰富的绘图功能,包括二维几何图形、曲线、文本、...

    GDI+的说明 GDI+的说明 GDI+的说明 GDI+的说明

    GDI+,全称Graphics Device Interface Plus,是微软在Windows操作系统中引入的一种先进的图形处理工具,是对原有GDI(Graphics Device Interface)的升级版本。GDI+为开发者提供了丰富的API接口,用于处理二维矢量...

    GDI+程序设计 GDI+程序设计 GDI+程序设计 GDI+程序设计

    在实际编程中,GDI+通常与Windows API或.NET Framework中的控件结合使用,如Form、PictureBox等。通过编写代码,开发者可以实现动态图形绘制、动画效果、用户界面定制等功能。 学习GDI+程序设计,你需要掌握C++或C#...

    GDI+图像程序设计(PDF & 源码 -电子工业出版社)

    本书适合于开发GDI+图形应用程序的初、中级程序员阅读,书中给出了大量用C#语言编写的可重用示例代码,可以使读者更快地掌握书中所介绍的各种知识和概念。本书也可以作为大专院校相关课程的重要辅导教材。 【编辑...

    MFC_GDI及GDI+_CButton重绘

    在描述中提到的“btn项目为GDI按钮重绘,btnDemo为GDI+按钮重绘”,这表明存在两个不同的示例项目,一个是使用GDI进行按钮的重绘,另一个则是用GDI+实现。在MFC中,可以通过覆盖CButton的OnPaint成员函数,使用...

    GDI+绘制曲线图_gentle7gp_gdi曲线_GDI+绘制动态曲线图_

    在本文中,我们将深入探讨如何使用GDI+(Graphics Device Interface Plus)在Windows Forms应用程序中绘制动态曲线图。GDI+是.NET Framework提供的一种强大的图形处理API,它允许程序员创建和控制各种图形元素,包括...

    VB 经典GDI+模块

    4. **图形变换**:GDI+支持缩放、旋转、平移等图形变换操作,使得开发者可以在VB6中轻松实现动态的图形效果,如旋转按钮、放大镜效果等。 5. **抗锯齿处理**:GDI+提供抗锯齿绘制,使图形边缘更加平滑,提高了图像...

    异常A generic error occurred in GDI+的解决办法

    在使用.NET Framework进行Windows应用程序开发时,可能会遇到一个常见的错误提示:“A generic error occurred in GDI+”。这个异常通常在处理图像、图形或者打印任务时出现,涉及到GDI+(Graphics Device Interface...

    Delphi使用GDI+制作任意图片形状窗口

    在本文中,我们将深入探讨如何使用Delphi集成开发环境结合GDI+库来创建具有任意图片形状的不规则窗体。GDI+是Microsoft提供的一个图形设备接口,它扩展了传统的GDI功能,使得开发者可以更方便地进行图形绘制和处理。...

    gdi+ 帮助文档

    GDI+开发的帮助文档,讲得清晰浅显,而且是中文的.如果学习GDI+开发的话,特别是初学者,强烈推荐下载. 对于初学者,还有一个问题就是,如果想要进行GDI+开发, 需要下载一个GDI+的开发包(SDK). 网上搜到的一般只包含一个...

    GDI+程序设计 (中文版pdf)

    第四部分讲述了GDI+功能在Web应用程序中的使用,如在Internet上提供GDI+图像、创建***服务器控件和使用GDI+创建Web服务等。这部分内容是将GDI+编程技能拓展到Web开发领域的关键指导。 书中还提供了一些示例代码,...

Global site tag (gtag.js) - Google Analytics