窗口刷新的时候,会产生Paint事件,那么我们给这个事件添加一个处理函数。然后在这个函数里画图。就能保证所画的图不被刷新掉,

它可以总是显示。Paint事件对应的委托是:public delegate void PaintEventHandler(object sender, PaintEventArgs e);

示例1:在窗口中间画一根线。(创建WindowsForms应用程序)

            Graphics g = this.CreateGraphics();
Pen p = new Pen(Color.Black);
//在屏幕中间画一根线
g.DrawLine(p, , this.Height / , this.Width, this.Height / );
//画一个矩形
g.DrawRectangle(p, , , , );
//画一个圆
g.DrawEllipse(p, , , , );
//手动释放资源
g.Dispose();
p.Dispose();

示例2:一个填充矩形

        private void formPaint(Object sender, PaintEventArgs e)
{
Graphics graphics = e.Graphics;
//蓝色画刷
SolidBrush brush = new SolidBrush(Color.FromArgb(, , ));
//一个矩形
Rectangle rect = new Rectangle(, , , );
//填充一个矩形
graphics.FillRectangle(brush, rect);
}

示例3:画一张png图片(用PNG是因为可以显示透明的图片,GIF图片也有这个作用)

        private void formPaint(Object sender, PaintEventArgs e)
{
Graphics graphics = e.Graphics;
//加载图片
Image img = Image.FromFile(Application.StartupPath+ @"\111.png");
//图片显示起始位置
Point strPoint=new Point(,);
//不限制大小绘制
graphics.DrawImage(img, strPoint);
//缩小图片绘制,限制在一个矩形内
Rectangle rect=new Rectangle(,,,);
graphics.DrawImage(img, rect);
}

示例4:用DrawString显示文字

DrawString在Grahpics类里有好几个重载,有的可以让字符串在一个矩形内显示,有的可以使用特定的显示格式。这里就不做详细介绍了。

只讲比较常用的。

看例子吧,处理键盘输入字符事件,在窗口显示输入的字符。如下:

    public partial class Form2 : Form
{
public static String strText = "";
public Form2()
{
InitializeComponent();
this.Paint += formPaint;
}
private void formPaint(Object sender, PaintEventArgs e)
{
Graphics graphics = e.Graphics;
//创建画刷
SolidBrush brush=new SolidBrush(Color.FromArgb(,,));
//创建字体
Font font=new Font("宋体",20f);
//显示字符串,在一个矩形内
graphics.DrawString(strText, font, brush, this.ClientRectangle); }
private void Form2_MouseDown(object sender, MouseEventArgs e)
{
strText += e.Button.ToString();
//刷新整个窗口
this.Invalidate();
}
}

效果图如下:

示例5:重写OnPaintBackground绘制背景的方法

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//重写OnPaintBackground方法
protected override void OnPaintBackground(PaintEventArgs e)
{
//禁止基类处理,我们自己来绘制背景
//base.OnPaintBackground(e);
//透明背景画刷
SolidBrush brush=new SolidBrush(Color.Transparent);
//填充整个窗口
e.Graphics.FillRectangle(brush,this.ClientRectangle);
//再画一个圆圈
Pen pen = new Pen(Color.FromArgb(, , ),);
e.Graphics.DrawEllipse(pen, this.ClientRectangle);
}
}

示例6:TextureBursh图片画刷

可以用图片来填充一个形状,如矩形,圆形。图片不够大则平铺显示。

private void formPaint(Object sender, PaintEventArgs e)
{
Graphics graphics = e.Graphics;
//创建图片画刷
Rectangle rect = new Rectangle(, , , );
TextureBrush brush = new TextureBrush(Image.FromFile(Application.StartupPath+ @"\111.png"),rect);
       graphics.FillEllipse(brush, , , , );
     }

构造函数最后一个参数,rect表示要用图片的哪部分进行填充,10,10表示图片起始位置(左上角),70,70表示宽度和高度,注意不能超出图片原有范围。整张图片填充的话,则不需要指定rect。构造函数里填一个参数就行了。

C# GDI+编程的更多相关文章

  1. GDI+编程说明及小结

    原文地址:http://blog.csdn.net/byxdaz/article/details/5972759 GDI+(Graphics Device Interface Plus图形设备接口加) ...

  2. GDI编程

    图形设备接口(GDI)是一个可执行程序,它接受Windows应用程序的绘图请求(表现为GDI函数调用),并将它们传给相应的设备驱动程序,完成特定于硬件的输出,象打印机输出和屏幕输出.GDI负责Wind ...

  3. GDI编程小结

    图形设备接口(GDI)是一个可运行程序,它接受Windows应用程序的画图请求(表现为GDI函数调用),并将它们传给对应的设备驱动程序,完毕特定于硬件的输出,象打印机输出和屏幕输出.GDI负责Wind ...

  4. MFC控件GDI编程

    MFC控件GDI编程 一丶学习内容 1.了解常用的GDI函数绘图. 2.使用常用的画笔画刷. 二丶常用的GDI函数绘图 上方则为我们常用的GDI函数了. 画线 矩形. 以及圆 等等. 2.1 画线代码 ...

  5. C# GDI+编程之剖析startAngle和sweepAngle

    以DrawArc为例,它有一种形式如下的构造函数 public void DrawArc(Pen pen, Rectangle rect, float startAngle, float sweepA ...

  6. GDI+编程小结

    GDI+(Graphics Device Interface Plus图形设备接口加)是Windows XP和Windows Server 2003操作系统的子系统,也是.NET框架的重要组成部分,负 ...

  7. 一篇文章让你彻底弄懂WinForm GDI 编程基本原理

    一 GDI编程原理 GDI(Graphics Device Interface,图形设备接口),主要负责Windows系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出. GDI的常用 ...

  8. GDI 编程基础简介

    今天准备重新对GDI的知识进行回顾一下,以便加深认识. 一.GDI 在进行Windows编程时,可能经常会用到设备描述表的类型句柄,例如,最厂家的HDC,它就是图像设备描述类型句柄.因为GDI的绘图函 ...

  9. GDI编程基础

    窗口和视口 视口是基于设备的采用的是设备坐标(单位:像素),窗口是基于程序的采用的是逻辑坐标(单位:像素/毫米/厘米等). 在默认的映射模式下,视口是与窗口等同的.但是如果改变其映射模式,则其对应的单 ...

  10. C#GDI+编程基础(一:Graphics画布类)

    GDI+存在的意义:将变成与具体硬件实现细节分开. GDI+步骤:获取画布,绘制图像.处理图像 命名空间: using System.Drawing;//提供对GDI+基本图形功能的访问 using ...

随机推荐

  1. tfboys——tensorflow模块学习(三)

    tf.estimator模块 定义在:tensorflow/python/estimator/estimator_lib.py 估算器(Estimator): 用于处理模型的高级工具. 主要模块 ex ...

  2. 20170411 F-02创建财务凭证

    SAPMF05A 100 X       0   BDC_OKCODE /00   0   BKPF-BLDAT 20170411   0   BKPF-BLART SA   0   BKPF-BUK ...

  3. 解决svnserve: Can't bind server socket: Address already in use

    最近在忙着搭建jenkins系统集成版本控制和git分布式版本控制,其中涉及到了点svn方面的,由于自己也是第一次搭建svn,挺顺利的,中间遇到点小问题: 我使用的是yum安装的svn,安装完成配置结 ...

  4. XP、win7下Excel 2007多窗口打开Excel的解决方法

    http://blog.x6x8.com/?p=330 Win7下的方法(借鉴了XP的方法): 1.先在桌面先建一个txt文件,将下面的代码复制进去 32位WIN7复制下面一行start “Excel ...

  5. 【转】Python爬虫(6)_scrapy框架

    官网链接:https://docs.scrapy.org/en/latest/topics/architecture.html 性能相关 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下 ...

  6. ThinkPHP框架基础知识一

    ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来 ...

  7. Apache commons-io实现单文件读取和写入

    Apache commons-io提供了很多类,这里只介绍FileUtils类. FileUtils类提供了一些操作文件对象的实用方法,包括文件的读取.写入.复制和比较等. 比如逐句读取和写入一个文件 ...

  8. Docker容器技术-镜像分发

    一.镜像分发 1.镜像及镜像库的命名方式 指定镜像名称和标签的方法: 在狗偶见镜像时 通过docker tag命令 [root@bogon ~]# cd identidock/ [root@bogon ...

  9. SOA 面向服务架构 阅读笔记(四)

    15  SOA管理 15.1 管理指的是实现一个制约和平衡的一致过程,以确保得到期望的结果. 15.2 管理被广泛应用于人工流程和软件流程中,一旦管理失败,后果会非常严重. 15.3 SOA管理的首要 ...

  10. B-树 C++模板类封装(有图有真相)

    定义: 一棵m阶B-树是拥有以下性质的多路查找树: 1.非叶子结点的根结点至少拥有两棵子树: 2.每一个非根且非叶子的结点含有k-1个关键字以及k个子树,其中⌈m/2⌉≤k≤m: 3.每一个叶子结点都 ...