1、北京理工大学珠海学院 孙细斌,1,C程序设计,第9章 GDI+编程 第10章 文件操作,北京理工大学珠海学院 孙细斌,2,学习目标,了解GDI及相关的类 掌握图形绘制过程和方法 掌握文本的绘制 掌握图像的绘制 了解文件和流及相关类 掌握文件的读写,北京理工大学珠海学院 孙细斌,3,9.1 GDI及相关类介绍,9.1.1 GDI GDI是GDI(Graphics Device Interface)的后续版本,是一种应用程序编程接口。 包含System.Drawing、System.Drawing.Drawing2D、System.Drawing.Imaging、System.Drawing.Te
2、xt等6个命名空间。,包含大多数的类、结构、枚举和委托,和基本绘图功能有关,包含提供高级功能的复杂的绘图类,包含图像处理的各种类,包含将打印机或打印预览窗口作为输出设备时使用的类,包含一些预定义的对话框、属性表单和其他用户界面元素,包含对字体和字体系列执行更高级操作的类,北京理工大学珠海学院 孙细斌,5,9.1.2 GDI中主要类和结构,Graphics类:是GDI的核心功能,负责处理大多数的绘制操作,是实际绘制直线、曲线、图形、图像和文本的类。 Point结构:表示二维平面上的点,以像素为单位。 Size结构:表示一个对象的大小,以像素为单位。 Rectangle结构:表示屏幕上的一个矩形区
3、域。,北京理工大学珠海学院 孙细斌,6,9.1.2 GDI中主要类和结构,Brush类:填充颜色的画刷,有实心画刷SolidBrush、纹理画刷TextureBrush等。 Pen类:绘制线条的画笔。 Font类:定义了字体的各种属性和操作的各种方法。 Image类:定义了图像的属性和操作。,北京理工大学珠海学院 孙细斌,7,9.2 绘制图形,通过Graphics类中的方法来绘制图形。 9.2.1 获得Graphics类的对象 重定义OnPaint()方法,或直接添加Paint事件,在事件处理程序中获得对象。 protected override void OnPaint ( PaintEve
4、ntArgs e) Graphics g = e.Graphics; 直接调用CreateGraphics()方法来获得。 Graphics g = this.CreateGraphics();,北京理工大学珠海学院 孙细斌,8,9.2.2 设置绘制参数,使用Point 、Size结构和Color类来设置参数,例如: Point p1 = new Point(50,100); Size s = new Size(200,300); Color redColor = Color.FromArgb(50,255,0,0);,北京理工大学珠海学院 孙细斌,9,9.2.3 设置绘制工具,使用Brush
5、和Pen类来创建绘制工具,例如: Brush blueBrush = new Brush(Color.Blue); Pen redPen = new Pen(Color.Red); Pen hPen = new Pen(blueBrush, 20); Brush aBrush = new Brush(Color.FromArgb(80,255,0,0);,北京理工大学珠海学院 孙细斌,10,9.2.4 使用Graphics类中的方法绘制图形,DrawLines():绘制线条 DrawCurve():绘制曲线 DrawRectangle():绘制矩形 DrawEllipse():绘制椭圆 Dra
6、wPie():绘制扇形 E.g:g.DrawLine(pen, new Point(10, 20), new Point(220, 80); g.DrawRectangle(pen, p1.X, p1.Y, s.Width, s.Height);,北京理工大学珠海学院 孙细斌,11,9.3 绘制文本,先创建Font类的对象。 设置参数,如字体类型、大小等 创建绘制工具,如Pen或Brush 使用Graphics类中的DrawString方法绘制文本。,北京理工大学珠海学院 孙细斌,12,9.4 绘制图像,获得Graphics对象 创建Image对象,导入需要显示的图片。 创建工具并设置参数。
7、使用Graphics类中的DrawImage方法将图片绘制到界面上。 E.g:g.DrawImage(myimage, p); g.DrawImage(myimage, destrect,srcrect,units);,北京理工大学珠海学院 孙细斌,13,10.1 使用流和文件,10.1.1 文件管理 文件是在各种媒质上(可移动磁盘、硬盘、CD等)永久存储的数据的有序集合。是一种进行数据读写操作的基本对象。 流非常类似于单独的磁盘文件,它也是进行数据读写操作的基本对象。文本流(text stream)二进制流(binary stream) 当打开一个文件并对其进行读写时,该文件就成为了流(st
8、ream),对流可以执行读写操作。,北京理工大学珠海学院 孙细斌,14,Object (System),MarshallByRefObject (System),Directiory (System.IO),File (System.IO),Path (System.IO),FileSystemInfo (System.IO),FileInfo (System.IO),DirectoryInfo (System.IO),文件管理,目录管理,北京理工大学珠海学院 孙细斌,15,10.1.1 文件管理,File类:只包含静态方法,提供了用于创建、复制、删除、移动和打开文件的静态方法。使用于仅对文件
9、执行一个操作的情况。 FileInfo类:通过实例化的对象来使用成员方法,适用于同一个对象执行多个操作的情况。,北京理工大学珠海学院 孙细斌,16,File和FileInfo示例,File.Copy( “C:test.txt”, “D:test.txt”);FileInfo aFile = new FileInfo( “C:test.txt”);aFile.CopyTo( “D:test.txt”);,北京理工大学珠海学院 孙细斌,17,Directory类和DirectoryInfo类,Directory类:只包含静态方法。如删除目录、移动、创建目录等方法。DirectoryInfo类:需通
10、过实例化对象来使用当中的成员方法。,北京理工大学珠海学院 孙细斌,18,10.1.2 读写文件,1. 流操作 读取(read):把数据从流传输到某种数据结构中。 写入(write):将数据从某种数据结构传输到流中。 定位(seek):在流中查询或重新定位当前位置。,北京理工大学珠海学院 孙细斌,19,10.1.2 读写文件,2. 二进制文件读写(FileStream类) System.IO命名空间实现了.NET框架中的大部分文件I/O操作。 FileStream类继承自抽象类Stream,通过创建FileStream对象可以执行文件的读写操作。,2. 二进制文件读写(FileStream类),
11、例:FileStream s = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read);,文件名,打开现有文件,对文件执行只读操作,允许其他用户对该文件执行只读操作,北京理工大学珠海学院 孙细斌,21,2. 二进制文件读写(FileStream类),通过FileAccess、FileMode和FileShare枚举类型来控制文件的创建、打开和共享的方式。 FileAccess枚举类型:包括Read、ReadWrite和Write FileShare枚举类型:决定两个进程是否可以同时对同一个文件进行读取。 Fil
12、eMode枚举类型:指定操作系统打开文件的方式。,北京理工大学珠海学院 孙细斌,22,FileMode枚举成员,Append:打开现有文件并把文件读写指针定位到文件尾,如文件不存在,就创建一个新文件。 Create:指定操作系统创建新文件 CreateNew:指定操作系统创建新文件,如文件已存在,就引发异常 Open:指定操作系统打开现有文件 OpenOrCreate:如果文件存在,就指定操作系统打开该文件,否则,就创建新文件。 Truncate:指定操作系统打开现有文件。文件一旦打开,就将被截断为零字节大小。,北京理工大学珠海学院 孙细斌,23,FileShare枚举成员,Inheritab
13、le:使文件句柄可以由子进程继承 None:拒绝共享当前文件 Read:允许随后打开文件执行读取操作 ReadWrite:允许随后打开文件执行读写操作 Write:允许随后打开文件执行写入操作,北京理工大学珠海学院 孙细斌,24,二进制文件读写的方法,ReadByte( )和WriteByte ( ) Read( )和Write ( ) E.g:byte bytewrite = 25;fs.WriteByte(bytewrite);int iData = fs.ReadByte();textBoxfile.Text = iData.ToString();,byte bytearray = ne
14、w byte10; for (int i = 0; i!= bytearray.Length; i+)bytearrayi = Convert.ToByte(i); fs.Write(bytearray, 0, 10);,byte byteshow = new byte10; int byteread = fs.Read(byteshow, 0, 10); for (int k = 0; k != byteshow.Length; k+)textBoxfile.Text += byteshowk.ToString();,北京理工大学珠海学院 孙细斌,25,3. 文本文件的读写,使用Stream
15、Reader或StreamWriter类, E.g: StreamReader sr = new StreamReader(“C:test.txt”); textBoxfile.Text = sr.ReadToEnd( ); sr.Close( );,sr.ReadLine( );,北京理工大学珠海学院 孙细斌,26,继承自抽象类TextWriter,以特定的编码方式将字符写入流中,且可按照顺序写入字符序列。StreamWriter sw = new StreamWriter(“c:test.txt”, false);sw.WriteLine(“Log Line 1”);sw.WriteLine(“Log Line 2”);sw.Close( ); Q:test.txt文件的内容的变化?,是否将数据追加到文件。False,如果文件存在,该文件将被改写,北京理工大学珠海学院 孙细斌,27,4. 读写XML文件,如果文件中包含了不同类型的数据,如流对象、TextReader类对象和定位本地文件或Web站点的URL等,那么可以使用XMLTextReader和XMLTextWriter类。 XmlTextReader类强制实施XML格式规范,还可读取文本块或从流中读取字符。,北京理工大学珠海学院 孙细斌,28,The End !,再见!,