GDI+编程入门

GDI+编程入门

ID:40230431

大小:539.20 KB

页数:50页

时间:2019-07-27

上传者:xinshengwencai
GDI+编程入门_第1页
GDI+编程入门_第2页
GDI+编程入门_第3页
GDI+编程入门_第4页
GDI+编程入门_第5页
资源描述:

《GDI+编程入门》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

GDI+编程入门 2学习内容掌握GDI+的基本知识Graphics对象与Paint事件常用的数据结构、画笔、画刷、文字与图像的显示参考例子GUIsample完成大作业 GDI+GDI+是Microsoft的新一代的二维图形系统,它完全面向对象。GDI+包括三部分:二维矢量图形绘制、图像处理和文字显示。要在Windows窗体中显示字体或绘制图形必须要使用GDI+。GDI+提供了多种画笔、画刷、图像等图形对象,此外还包括一些新的绘图功能,如Alpha混色、渐变色、纹理、消除锯齿以及使用包括位图在内的多种图像格式。GDI+使用的各种类大都包含在命名空间System::Drawing中。 座标系统在我们开始之前,一定要先知道GDI+的座标系统如何定义。座标原点(0,0)在左上角,X轴及Y轴分别向右及向下增加,预设的单位长度是像素(pixel),请看下图: 常用的数据结构在使用GDI+显示文字和绘制图形时,经常要用到一些数据结构,如Size、Point和Rectangle等。它们在System::Drawing命名空间中定义,都属于值类型(结构类型)。Point结构代表Windows窗体应用程序中的一个二维表面上的位置,常用于定义窗体或控件的位置;表示一个点的坐标值,具有以下两种属性:X,定义Point结构的x坐标或者水平位置。Y,定义Point结构的y坐标或者垂直位置。初始化方法有4种Point():空点;Point(intx,inty):直接指定X坐标和Y坐标初始化; Point结构Point(intdw):通过一个用32位的整数来初始化,参数的高16位表示Y坐标,低16位表示X坐标。Point(Sizesz):通过一个Size变量来初始化。sz的宽度表示X坐标,高度表示Y坐标。可通过IsEmpty属性检测Point结构是否为空,为空则返回true。可以直接对Point变量进行+、–、==、!=运算以及Point变量与Size值的加减操作。PointF结构类似Point结构,区别是它的坐标是浮点值。Point值可以隐式自动转换成PointF值;PointF值转换成Point值,可以通过Point结构包含的3种静态方法:Ceiling,每个坐标值取大于或等于原值的最小整数值;Round,每个坐标值四舍五入取最接近的整数值;Truncate,每个坐标值取小于或等于原值的最大整数值。 Size结构Size结构用于定义Windows窗体应用程序中的窗口、控件和其他矩形区域的大小。具有宽度值Width和高度值Height属性,也可以使用IsEmpty属性来检测Size是否为空。初始化方法直接指定高度值和宽度值,Sizeb=Size(50,100);通过一个Point变量来初始化,Sizea=Size(Point(100,20));判断两个Size变量是否相等可以使用其Equals方法,如size1.Equals(size2);SizeF结构与Size结构——类似PointF结构与Point结构。 Rectangle结构Rectangle结构保存一个矩形区域的位置和大小,包含有X、Y、Width、Height、Size属性,还有Top、Bottom、Left、Right等属性返回各边坐标值。Rectangle的初始化指定一个Point值和Size值,如Rectanglec=Rectangle(point1,size1);直接指定矩形位置、宽度和高度值,前两个参数指定了矩形左上角的XY坐标值,后两个参数指定矩形的宽度和高度。如Rectangled=Rectangle(left1,top1,width1,height1);包含的一些方法Contains方法:确定一个矩形或一个点是否在当前矩形区域内。参数类型可以是Point结构,Rectangle结构和点坐标值。Union方法:求两个矩形的并集。参数是两个要求并集的矩形,返回一个包含其并集的Rectangle结构。 Rectangle结构Intersect方法:求两个矩形的交集。参数为两个求交的矩形,则返回一个表示其交集的Rectangle结构;参数为一个矩形,则获得当前矩形与参数矩形的交集Rectangle,用这个结果替换当前矩形。可以直接对Rectangle变量进行等于==或不等于!=操作。正在绘制或操作一个控件的工作区时,常常使用Rectangle结构。窗体的工作区是位于标题栏(或有菜单栏)下面,且在窗体边界内部的控件的一部分。Form类中有一个ClientRectangle属性,用于获取工作区的位置。如,RectanglemyRect=ClientRectangle;这里需要注意,状态栏虽然覆盖了工作区,但并没有减少工作区的总大小。在计算一个窗体的可视区域时,要将工作区的大小值减去状态栏的大小。RectangleF结构:使用SizeF结构和PointF结构。 Graphics对象在传统的Windows窗口中,使用DeviceContext,即设备上下文,来进行绘图操作;而在.NET框架的Windows窗体中则使用绘图对象进行绘图操作。使用System::Drawing命名空间中的Graphics类封装GDI+的绘图对象,在Windows窗体中的所有绘图操作(包括显示文字)都必须通过这个类来进行。Graphics类相当于MFC中的CDC类。要使用Graphics进行绘图,首先必须获得它的对象实例或是创建一个Graphics对象。最常用的方法是可以通过窗体的Paint事件来获取对象实例,创建对象则通过CreateGraphics方法。 Graphics对象Graphics类提供的许多绘图方法有:Clear方法:使用一种指定的颜色填充整修绘图表面。例如,Graphics^g=this->CreateGraphics;g->Clear(this->BackColor);//用当前控件的背景色填充绘制方法,一般都有多个重载,第一个参数一般都是绘制画笔Pen类型:DrawClosedCurve:绘制闭合曲线;DrawCurve:绘制曲线;DrawImage:绘制图像;这里没有使用Pen类型的参数,第一个Image参数指定要绘制的图像,第二个及之后的参数指定绘制的位置。DrawLine:绘制直线;第二个及之后的参数是两个点的表示。DrawString:在指定位置以指定字体显示字符串。DrawRectangle和DrawRectangles:绘制一个或多个矩形。 Graphics对象填充方法,一般都有多个重载,第一个参数一般都是填充画刷Brush类型:FillRectangle:填充矩形;第二个参数可以是一个矩形结构或者其他可表示矩形的方式(如Point+Size)。FillClosedCurve:填充闭合曲线;FillRegion:填充一个区域。两个参数,第一个指定填充使用的画刷(Brush类型),第二个指定填充区域(Region类型)。FromImage方法:从参数指定的Image对象创建一个新的Graphics对象。GetHDC方法:返回与Graphics相关联的设备句柄。ReleaseHDC方法:释放设备句柄。 颜色Color.NET框架中的颜色基于4种成分。除了三原色红、绿、蓝外,还有第4种称为alpha的值用于指定颜色的透明度。其中每个成分都是一个字节,在0~255之间取值。在GDI+中,用值类型Color结构来表示颜色。在类和方法中要使用颜色的时候,它们都需要Color结构的一个实例。Color结构中预定义了141种颜色,它们都使用静态属性来表示。其中有一种Transparent颜色,其alpha成分设置为0,表示透明颜色创建Color对象实例的方法1.创建Color实例最简单的方法就是通过一个静态属性来返回。如,ColornewColor=Color::Red;2.可以使用默认的构造函数来创建Color实例,但是所产生的Color对象是纯黑色的,并且不能修改为其他颜色。 颜色Color3.通过调用FromArgb静态方法,它有4种版本。Colorsky=Color::FromArgb(100,200,200,255);参数依次表示alpha成分,红,绿,蓝。Colorsky=Color::FromArgb(200,200,255);这里缺省了alpha成分,它隐式地设置为它的最大值,生成一种完全不透明的颜色。Colorsky=Color::FromArgb(100,Color::Blue);这里使用一个现有的Color对象实例,只是修改了alpha成分的值。Colorsky=Color::FromArgb(0x64C8C8FF);使用一个形式为AARRGGBB的组合整数。 颜色Color4.通过调用FromKnownColor静态方法,参数为KnownColor枚举类型的值。如Colorsky=Color::FromKnownColor(KnownColor::Blue);KnownColor枚举类型:其值包含了Color结构的所有141种颜色以及SystemColors类的26种颜色。5.通过调用FromName静态方法,参数是一个字符串,这个字符串必须是KnownColor枚举值的名称。如,Colorsky=Color::FromName(“Blue”);Color属性具有4个只读属性,可以用于提取颜色的各种成分A,返回颜色的alpha成分;R,红色成分;G,绿色成分;B,蓝色成分。 颜色Color其他有用的非静态属性IsNamedColor,判断颜色值是否在140个命名颜色中;IsKnownColor,判断颜色值是否KnownColor枚举的颜色;IsSystemColor,判断颜色值是否SystemColor类的属性值。Windows系统使用一些系统范围的颜色,如活动边框的颜色和标题栏颜色等。.NET框架为这些系统颜色提供了一个封装类——SystemColors。各种系统颜色以静态属性的形式保存在这个类中,可以直接通过类名来引用。具体系统颜色见表。 使用字体在窗体或控件中都包含有Font属性,表示窗体或控件当前使用的字体。在窗体或控件创建时,会使用系统的默认字体值。字体使用Drawing::Font类封装,通过创建这么个类的实例可以创建新的字体。在创建时需要指定字体的名称、大小和风格,如果不指定字体风格则将创建常规字体。Font构造函数下面语句创建一个12磅的粗体隶书字体。Font^font1=gcnewFont(“隶书”,12,FontStyle::Bold);下面语句使用指定的度量单位而不是磅值来创建字体Font^font2=gcnewFont(“隶书”,12,GraphiUnit::Document);组合前两个构造函数Font^font3=gcnewFont(“隶书”,12,FontStyle::Bold,GraphiUnit::Document); 使用字体GraphicsUnit枚举类型,用于指定给定数据的度量单位。Display,将1/75英寸指定为度量单位。Document,将文档单位(1/300英寸)指定为度量单位。Inch,英寸。Millimeter,毫米。Pixel,设备像素。Point,打印机点(1/72英寸)。World,通用单位。.NET框架中字体风格使用FontStyle枚举类型定义。其值有以下一些,它们可以组合使用:Bold:设置字体风格为粗体;Italic:设置字体风格为斜体;Regular:常规字体;Strikeout:字体带删除线;Underline:字体带下划线。 使用字体一个字体所具有的属性是只读的,修改任何一个属性都将产生一个新的字体。最常用属性有:Bold,字体是否为粗体;FontFamily,FontFamily枚举值,确定字体的字符集;Height,字体高度;Italic,字体是否为斜体;Size,字体大小;SizeInPoints,字体的磅值,不考虑当前的Unit属性设置;Strikeout,字体是否有删除线;Style,应用于这个字体的所有FontStyle枚举值;Underline,字体是否有下划线;Unit,GraphicsUnit枚举值,确定Height、Width和Size属性使用的单位。字体示例程序 使用画笔用Pen类型封装,用于绘制图形。可以使用这个类来创建一个指定颜色、默认宽度的画笔对象。构造函数Pen^penRed=gcnewPen(Color::Red);这里通过参数指定画笔颜色,初始宽度默认为1。Pen^PenRed=gcnewPen(Color::Red,10);参数指定画笔颜色和宽度。Pen^PenRed=gcnewPen(brushRed);参数中使用画刷对象来指定画笔的模式。Pen^PenRed=gcnewPen(brushRed,5);参数中使用画刷来指定画笔模式,同时指定宽度。 使用画笔Pen类型可以动态修改属性,改变属性时不必重新创建Pen对象。Pen类常用属性有:Alignment,指定Pen对象的对齐方式;是一个PenAlignment枚举值。Brush,获取或设置用于确定此Pen对象的属性的Brush对象;Color,获取或设置画笔颜色;EndCap,指定线条末端出现的形状。这是一个LineCap枚举值,默认为LineCap::Flat。LineJoin,指定此Pen对象绘制的两条连续直线终点之间的联接样式。这是一个LineJoin枚举值。PenType,获取用此Pen对象绘制的直线的样式,是一个PenType枚举值。StartCap,指定线条起点出现的形状。默认为LineCap::Flat。Width,获取或设置画笔绘制的线条的宽度。 使用画笔一些枚举类型(System::Drawing::Drawing2D命名空间)PenAlignment枚举类型:指定相对于理论上、零宽度的线条的Pen对象的对齐方式。画笔宽度的中点根据这个枚举值相对于所绘制的线条对齐。Center,在线条边界的中间画直线。Inset,在构成一条曲线或者一个图形边界的线条内部画直线。Left,指定被定位于所绘制的线条的左侧。Outset,指定被定位于所绘制的线条的外侧。Right,指定被定位于所绘制的线条的右侧。LineCap枚举类型:用于指定如何绘制线条的端点。AnchorMask,一个掩码值,测试LineCap值是否指定了一个锚头帽。ArrowAnchor,指定箭头状锚头帽;DiamondAnchor,指定菱形锚头帽。Custom,指定自定义线帽。Flat,不画帽,默认值;NoAnchor,没有锚,与Flat有同样的效果。Round,指定圆线帽;RoundAnchor,指定圆锚头帽。Square,指定方线帽;SquareAnchor,指定方锚头帽。Triangle,指定三角线帽。 使用画笔LineJoin枚举类型:指定如何连接连续的线条。Bevel,指定成斜角的联接。这将产生一个斜角。Miter,指定斜联接。扩展线条的外界,直到它们相接触。MiterClipped,指定斜联接。这种方式要受Pen类的MiterLimit属性的限制。Round,指定圆形联接。这将在两条线之间产生平滑的圆弧。PenType枚举类型:指定用来填充线条的Pen对象填充类型。HatchFill,指定阴影填充。LinearGradient,指定线性渐变填充。PathGradient,指定路径渐变填充。SolidColor,指定实填充。TextureFill,指定位图纹理填充。 使用画笔Pen类的DashStyle属性:设置或获取画笔的风格。其属性值在System::Drawing::Drawing2D命名控件中的DashStyle枚举类型中定义。可取值有:Custom:自定义风格;Dash:划线,DashDot:划线-点,DashDotDot:划线-点-点,Dot:点线,Solid:实线, 使用画笔SystemPens类Windows系统颜色画笔,用于创建与用户界面和系统颜色相匹配的笔。它的每个静态属性都返回一个Pen对象。下面这行语句创建一个Pen对象,将它初始化为用户加亮显示文本时首选的颜色。Pen^highlightPen=SystemPens::HighlightText;SystemPens的一些静态属性Control,控件背景颜色;ActiveCaptionText,活动窗口标题栏的文本颜色;HighlightText,加亮显示的文本颜色;WindowText,窗口的文本颜色;WindowFrame,窗口的图文框颜色。 使用画笔FromSystemColor静态方法:可以根据作为参数传递给这个方法的一个Color值来创建画笔。如,Pen^pen1=gcnewSystemPens::FromSystemColor(SystemColors::Window);从SystemPens类得到的所有Pen的引用都是1个像素的默认宽度,对它们不能进行修改。如果要使用可选择宽度或类型的画笔,只能使用Pen类来创建。Pens类提供了很多预定义颜色的画笔对象,它们以静态属性的形式保存。例如要创建一个红色画笔,可以调用Pens::Red属性。如,Pen^pen1=Pens::Red;Pens类中颜色命名规则与Color类中相同,知道颜色名字则可以直接调用。 使用画刷显示文字时除了指定字体外,还要指定画刷,另外在图形的填充时也需要使用画刷,同时画笔也可以基于画刷来创建。使用Brush类表示,这是一个抽象类,不能直接用来创建画刷实例。在.NET框架中提供了一些派生类,可以使用它们来创建画刷对象。在System::Drawing命名空间中定义了两个最基本的画刷:SolidBrush和TextureBrush。其他的3种用于更高级的效果,在System::Drawing::Drawing2D命名空间中可以找到。SolidBrush类,使用一种纯色来填充区域;创建方法SolidBrush^skyBrush=gcnewSolidBrush(Color::Blue);只有一个Color属性,用于获取或设置画刷颜色。 使用画刷TextureBrush类,使用一个图像来填充区域;可以使用整个图像或者仅仅是图像的一部分来构造画刷;也可以旋转或按比例调整整个图像来满足要求。构造方法:最简单的就是传入一个图像。如,TextureBrush^br=gcnewTextureBrush(“C:image1.bmp”);支持多种图像格式(bmp,gif,jpeg等)。常用属性WrapMode,指定这个画笔的换行模式。这是个WrapMode枚举值。WrapMode枚举类型:用于确定这个画刷填充区域的方式。Clamp,不平铺,画刷图像只显示一次。Tile,默认值,平铺画刷图像填充整个区域。TileFlipX,平铺画刷图像填充整个区域。每隔一列水平反转这个图像。TileFlipY,平铺画刷图像填充整个区域。每隔一行垂直反转这个图像。TileFlipXY,结合上两个枚举值的行为。 使用画刷HatchBrush类,用预定义的阴影图案来填充区域;每种阴影模式由两种颜色组成:背景和前景。可以通过这个画刷类来指定这两种颜色和阴影模式的类型。LinearGradientBrush类,用一个线性渐变区来填充区域;这个画刷使用从一种色调渐变到另一种色调的颜色填充区域。这里画刷中保存了进行渐变的两种颜色。PathGradientBrush类,用一个路径渐变区来填充区域。使用一组渐变的颜色来填充区域。与LinearGradientBrush类不同的是,这个画刷为渐变区提供了更灵活的形状。 使用画刷标准画刷Brushes类包含了所有标准颜色的画刷,Color类中每一个预定义的颜色都在这个类中有一个对应的画刷。这些标准画刷以静态属性保存在Brushes类中,可以直接引用。例如,Brush^brushRed=Brushes::Red;系统颜色画刷SystemBrushes类对应Windows的系统颜色,这些画刷也做为静态属性在SystemBrushes类中保存。 显示文字Windows窗体程序中文字的显示通过Graphics类的DrawingString方法进行。调用这个方法时要指定显示的字符串、使用的字体、使用的画刷以及显示的位置。可以通过创建丰富多彩的画刷来实现文字的特效显示。代码示例Image^img=Image::FromFile(“sample.jpg”);TextureBrush^tb=gcnewTextureBrush(img);Font^f=gcnewFont(“隶书”,72);Graphics^gg=e->Graphics;gg->DrawString(“VS2005”,f,tb,10,80);可以使用StringFormat类型对象来改变文字显示方向,作为一个参数放在位置参数后面。设置这个类的FormatFlags属性,其值由StringFormatFlags枚举定义。 显示文字StringFormat类为DrawString和其他方法指定文本布局的选项。具有用于控制格式选项的属性,常见的有:Alignment,指定水平的文本的对齐方式。是一个StringAlignment枚举值。FormatFlags,指定格式化信息。是一个StringFormatFlags枚举值。LineAlignment,指定垂直文本(也就是行)的对齐方式。是一个StringAlignment枚举值。StringAlignment枚举类型:指定文本字符串相对于其布局矩形的对齐方式。Center,指定文本在布局矩形中居中对齐。Far,指定文本远离布局矩形的原点位置对齐。在左到右布局中,远端位置是右。在右到左布局中,远端位置是左。Near,指定文本靠近布局对齐。在左到右布局中,近端位置是左。在右到左布局中,近端位置是右。 显示文字StringFormatFlags枚举类型:指定文本字符串的显示和布局信息,可以组合使用。DirectionRightToLeft,指定文本从右到左排列。DirectionVertical,指定文本垂直排列。DisplayFormatControl,作为格式符号,显示指定的格式字符。FitBlackBox,指定任何标志符号的任何部分都不突出边框。在默认情况下,需要在边缘处可见时,一些标志符号会稍微突出边框。例如,在一些字体中,当小写斜体的f与边框的最左边对齐时,f的下半部分会稍微突出到边框左边缘之左。设置此标记将确保任何绘图都不会超出边框,但是将导致文本的相邻行的对齐边缘看上去不齐。 显示文字LineLimit,在格式化的矩形中只布置整行。默认情况下,这种布置要继续到文本的结尾为止,或者到由于剪辑而不再有可见的行为止,看哪一种情况先发生。注意,此默认设置允许不是行高整数倍的格式化矩形将最后一行部分地遮住。若要确保看到的都是整行,请指定此值,并仔细地提供格式化矩形,使其高度至少为一个行高。。MeasureTrailingSpaces,在默认情况下,MeasureString方法返回的边框都将排除每一行结尾处的空格。设置此标记以便在测定时将空格包括进去NoClip,允许显示标志符号的伸出部分和延伸到边框外的未换行文本。在默认情况下,延伸到边框外侧的所有文本和标志符号部分都被剪裁。NoFontFallback,对于请求的字体中不支持的字符,禁用回退到可选字体。缺失的任何字符都用缺失标志符号的字体显示,通常是一个空的方块。NoWrap,在矩形中进行格式化时禁用文本换行。当传递的是点而不是矩形时,或者指定的矩形行长为零时,已隐含此标记。 显示图像使用Image类封装基本的图像操作。Image类是个抽象基类,不能直接用来创建对象实例。提供了几个静态方法用来从文件中载入图像,如FromFile和FromStream方法,支持多种图像文件格式(bmp、jpg和gif等).NET框架提供了几个派生类,可以用于创建对象实例Bitmap类:封装了GDI+位图(.bmp文件格式),可以使用这个类来操作位图。创建位图实例时,可以指定位图文件路径名,创建的新对象就会自动装入位图,然后可以调用Graphics类的DrawImage方法来显示位图。Bitmap^bmp=gcnewBitmap(“sample.jpg”);this->CreateGraphics()->DrawImage(bmp,100,100); 显示图像可以在显示图像时进行缩放操作。比如说可以使用一个Rectangle变量来指定位图位置和大小。Rectangle^rec=gcnewRectangle(10,10,100,100);this->CreateGraphics()->DrawImage(bmp,rec);可以只显示部分位图。比如说切取位图的左上角一块然后在目标矩形变量中显示。Clone方法:复制位图;GetPixel和SetPixel方法:获取或设置位图中特定像素的颜色;SetResolution方法:重新设置位图大小;MakeTransparent方法:把指定颜色设置为透明色。 Paint事件所有绘图操作都是通过响应窗体或控件的Paint事件来进行处理的。几乎所有的窗体和控件类都包含这个事件。Paint事件的代理类型为PaintEventHandler,事件参数类型为PaintEventArgs。在这个参数中包含了两个在处理Paint事件方面十分重要的属性:ClipRectangle,获取要在其中进行绘画的矩形。Graphics,返回一个Graphics类实例,用于输出。窗体和控件类提供了OnPaint虚拟方法来更方便地处理Paint事件,当触发Paint事件时会自动的调用这个方法。从Form类或控件类派生新类时,要在新类中覆盖基类提供的OnPaint方法以绘制自己的控件。 Paint事件在覆盖基类的OnPaint方法时,必须调用基类的OnPaint方法,否则其他绑定到Paint事件上的处理方法将不能调用。要触发Paint事件,可以通过调用控件类的Invalidate方法,它将使窗体或控件先无效,然后向它们发送绘图消息。通常调用Invalidate方法不会立即触发Paint事件,要实现立即触发,可以在这个方法后紧接着调用Update方法。例如This->Invalidate();this->Update();Graphics绘图和Paint事件示例程序 Paint事件//Paint事件,绘制控件System::VoidCustomControl_Paint(System::Object^sender,System::Windows::Forms::PaintEventArgs^e){//获取当前控件的GDI+绘图图面Graphics^g=e->Graphics;//填充一个矩形,颜色为Browng->FillRectangle(Brushes::Brown,ClientRectangle);} 鼠标和键盘常用事件40事件类型事件名称事件触发条件常用鼠标事件Click单击鼠标左键时触发MouseDoubleClick双击鼠标左键时触发MouseEnter鼠标进入控件可见区域时触发MouseMove鼠标在控件区域内移动时触发MouseLeave鼠标离开控件区域时触发常用键盘事件KeyDown按下某个键时触发KeyPress在KeyDown之后KeyUp之前触发,非字符键不会触发该事件KeyUp释放按键时触发 提供例子41 42基本画图 43基本画图 44可移动图形 45可移动图形 46行人走路 47学生信息管理 48主要设计要点通过控件的Paint事件使用GDI+绘制图形改变控件大小Size、位置Location等属性使用MouseDown、MouseUp、KeyDown等鼠标键盘事件捕获鼠标键盘消息,进行相关处理使用GDI+的GraphicsPath、Region两个类来分别保存路径和区域使用计时器组件Timer来计时,控制控件的生存期使用多线程组件BackgroundWorker来进行一些后台处理,通过Invoke函数通知界面处理及更新 49参考资源MSDN在线:GDI+:http://msdn.microsoft.com/zh-cn/library/d0ezbwf0(VS.80).aspx书籍:"BeginningVisualC++2008”,IvorHorton"GDI+Programming”,EricWhite电子书地址:ftp://222.201.145.177/GUI/Book/ 50TheEndThankyou!

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭