一、GDI+基础

1.GDI+简单介绍

GDI+是微软的新一代二维图形系统,它全然面向对象,要在Windows窗口中显示字体或绘制图形必需要使用GDI+。GDI+提供了多种画笔、画刷、图像等图形对象,此外还包含一些新的画图功能,比方渐变、除锯齿、纹理等。

GDI+包括三部分:二维矢量图形的绘制、图像处理和文字显示。GDI+使用的各种类大都包括在命名空间system::Drawing中。

2.经常使用的数据结构

在使用GDI+显示文字和绘制图形时,须要用到一些数据结构,比如Size、Point、Rectangle等,他们在命名空间System::Drawing中定义,都属于值类型(结构类型)。

(1)Point结构

Point结构代表Windows窗口应用程序中的一个二维表面上的位置,经常使用于定义窗口或控件的位置。表示一个点的坐标值,有X和Y两种属性。

可利用IsEmpty属性检測Point结构是否为空,为空则返回true。

可直接对Point变量进行+、-、==、。=运算以及Point值与Size值的加减操作。

PointF结构类似于Point结构,差别是它的坐标是浮点值。PointF值可通过Point结构包括的3钟静态方法转换成Point值

(2)Size结构

Size结构用于定义Windows窗口应用程序中的窗口、控件和其它矩形区域的大小。

具有宽度Width和Height属性。也能够使用IsEmpty属性来检測Szie是否为空。

初始化:Size b=Size(50,100);或者通过一个Point变量初始化:Size c=Size(Point(100,20));

SzieF结构与Size结构类似

(3)Rectangle结构

保存一个矩形区域的位置和大小。包括X、Y、Width、Height、Szie等属性值。

初始化:指定一个Point和Size值,如:Rectangle b=Rectangle(point1,size1);或者直接指定矩形位置、宽度和高度值。前两个參数指定了矩形左上角的XY值,后两个參数指定矩形的宽度高度

方法:

·Contains方法:确定一个矩形或一个点是否在当前矩形区域内。參数类型能够是Point结构。Rectangle结构和点坐标值。

·Union方法:求两个矩形的并集。參数是两个矩形。返回一个包括其并集的Rectangle结构。

·Intersect方法:求两个矩形的交集。

參数为两个矩形,返回Rectangle结构,參数为一个矩形时,则获取当前矩形与參数矩形的交集。

绘制一个空间的工作区时。经常常使用Rectangle结构。Form类中有一个ClientRectangle属性,用于获取工作区的位置。Rectangle myRect=ClientRectangle;窗口的可视化区域为工作区的大小减去状态栏的大小。

RectangleF结构与Rectangle结构类似。

二、Graphics对象

1.简单介绍

在传统的Windows窗口中,使用Device Context即设备上下文来进行画图操作。而在.NET框架的Windows窗口中使用画图对象进行画图操作。

使用System::Drawing命名空间中的Graphics类封装GDI+画图对象,在Windows窗口中的全部画图操作都必须通过这个类进行。Graphics类就相当于MFC中的CDC类。

要使用Graphics进行画图,首先必须获得它的对象实例或是创建一个Graphics对象。

最经常使用的方法是能够通过窗口的Paint时间来获取对象实例。创建对象则通过CreateGraphics方法。

2.Graphics类提供很多画图方法:

·Clear方法:使用一种指定颜色填充整修画图表面。

·DrawCloseCurve:绘制闭合曲线。

·DrawCurve:绘制曲线。

·DrawImage:绘制图像。

3.Graphics对象创建方法:

(1)在窗口或控件的 Paint 事件中接收对图形对象的引用。作为 PaintEventArgs 的一部分。

在为控件创建绘制代码时。一般会使用此方法来获取对图形对象的引用。

(2)调用某控件或窗口的 CreateGraphics 方法以获取对 Graphics 对象的引用,该对象表示该控件或窗口的画图图面。假设想在已存在的窗口或控件上画图,请使用此方法。

(3)由从 Image 继承的不论什么对象创建 Graphics 对象。

此方法在您须要更改已存在的图像时十分实用。

三、颜色Color

GDI+中用值类型Color结构来表示颜色,在类和方法中要使用颜色的时候,须要Color结构的一个实例。

Color结构中提前定义了141中颜色。它们都使用静态属性来表示。

1.创建Color对象实例的方法:

·通过一个静态属性返回:Color newColor=Color::Red;

·使用默认的构造函数创建Color实例,可是产生的Color对象是纯黑色的。而且不可改动

·调用FormArgb静态方法,Color sky=Color::FormArgb(100,200,200,255);參数依次为alpha成分,红。绿,蓝。alpha缺省即为最大值。即全然不透明

·使用FormKnownColor静态方法,參数为KnownColor枚举类型的值。比如:Color sky=Color::FormKnownColor(KnownColor::Blue);

·调用FormName静态方法。參数是一个字符串,这个字符串是KnownColor枚举值的名称。如。Color sky=Color::FormName(“Blue”);

2.Color属性

Color有4个仅仅读属性,分别alpha、红色、绿色、蓝色

Windows系统使用一些系统范围的颜色,如活动边框的颜色和标题栏颜色等。.NET框架为这些系统颜色提供了一个封装类——SystemColors,各种系统颜色以静态属性的形式保存在这个类中,能够直接通过类名引用

四、字体

在窗口和控件中都包括有Font属性。表示窗口或控件当前使用的字体,当窗口或控件创建时,会使用系统的默认字体值。

字体使用Drawing::Font类封装。通过创建这么个类的实例能够创建新的字体。

1.Font构造函数:

·以下语句创建一个12磅的粗体隶书字体。Font^ font1=gcnew Font(“隶书”,12。FontStyle::Bold);

·以下语句使用指定的度量单位而不是磅值创建字体,Font^ font2=gcnew Font(“隶书”,12。GraphiUnit::Document);

·组合上述两个构造函数,Font^ font3=gcnew Font(“隶书”,12,FontStyle::Bold,GraphiUnit::Document);

2.GraphiUnit枚举类型。用于指定给定数据的度量单位

·Display。将1/75英寸指定无味度量单位

·Docunment,将文档单位指定为度量单位

不一一列举

3.FontStyle枚举类型定义字体风格

·Bold,粗体

·Italic。斜体

·Regular,常规字体

·Underline,带下划线

五、画笔

画笔用Pen类型封装,用于绘制图形。能够使用这个类来创建一个指定颜色、默认宽度的画笔对象。

1.Pen构造函数

·通过參数指定画笔颜色,宽度为默认1。Pen^ penRed=gcnew Pen(Color::Red);

·指定画笔颜色和宽度,Pen^ penRed=gcnew Pen(Color::Red,10);

·參数使用画刷来指定画笔格式,Pen^ penRed=gcnew Pen(brushRed);

·參数使用画刷来指定画笔模式及宽度。Pen^ penRed=gcnew Pen(brushRed,5);

2.Pen类型经常使用属性

·Alignment,指定Pen对象的对齐方式;是一个PenAlignment枚举值。

·Brush,获取或设置用于确定此 Pen对象的属性的 Brush对象 。

·Color。获取或设置画笔颜色;

·EndCap。指定线条末端出现的形状。这是一个LineCap枚举值,默觉得LineCap::Flat。

·LineJoin。指定此 Pen对象绘制的两条连续直线终点之间的联接样式。

这是一个LineJoin枚举值。

·PenType,获取用此 Pen对象绘制的直线的样式,是一个 PenType枚举值。

·StartCap,指定线条起点出现的形状。默觉得LineCap::Flat。

·Width。获取或设置画笔绘制的线条的宽度。

3.画笔的使用

SystemPens类。Windows系统颜色画笔,用于创建与用户界面和系统颜色想匹配的笔,它的每一个静态属性都返回一个Pen对象。以下这行语句创建一个Pen对象,将它初始化为用户加亮显示文本时首选的颜色。

Pen^ highlightPen = SysternPens::HighlightText;

SystemPens类的静态属性

·Control,控件背景颜色;

·ActiveCaptionText,活动窗体标题栏的文本颜色;

·HighlightText,加亮显示的文本颜色;

·WindowText。窗体的文本颜色。

·WindowFrame,窗体的图文框颜色。

Pens类提供了非常多定义颜色的画笔对象,它们以静态属性的形式保存。比如要创建一个红色画笔,能够调用Pens ::Red属性。比如,Pen^ penRed=Pens::Red;

六、画刷

显示文字除了指定字体外,还有指定画刷,另外在图形填充时也要使用画刷,同一时候画笔也能够基于画刷来创建。

Brush类是一个抽象类。不能直接用来创建画刷实例。在System::Drawing命名空间中定义了两个最主要的画刷:SolidBrush和TextureBrush。

SolidBrush类,使用一种纯色来填充区域;创建方法:SoildBrush^ skyBrush=gcnew SoildBrush(Color::Blue);仅仅有一个Color属性。用于获取或设置画刷颜色。

TextureBrush类,使用一个图像来填充区域;方法:TextureBrush^ br=gcnew TextureBrush(“C:\image1.bmp”);

(1)画刷的使用。可使用静态属性直接引用:Brush^ brushRed=Brush::Red;

(2)系统颜色画刷SystemBrushes类,这些画刷也作为静态属性在SystemBrushes中保存

七、显示文字

Windows窗口程序中文字的显示通过Graphics类的DrawingString方法进行,调用这种方法须要指定显示的字符串、字体、画刷以及显示的位置

代码演示样例:

Image^ img=Image::FormFile(“sample.jpg”);

TextrueBrush^ tb=gcnew TextureBrush(img);

Graphics^ gg=e->Graphics;

gg->DrawString(“VS2005”,f,tb,10,80);

能够使用StringFormat对象来改变文字显示方向,作为一个參数放在位置參数后面

八、显示文字

使用Image类封装主要的图像操作。Image是个抽象基类。不能直接用来创建对象实例。提供了几个静态方法从文件里加载图像。如FomrFile和FromStream方法,支持多种图像文件格式(bmp、jpg、gif等)。

能够在显示图像时进行缩放操作。比方说能够使用一个Rectangle变量指定位图位置和大小。

Rectangle^ rec=gcnew Rectangle(10,10,100,100);

this->CreateGraphics()->DrawImage(bmp,rec);

九、Paint事件

全部画图操作都是通过响应窗口或空间的Paint事件来进行处理的。

差点儿全部的窗口和控件类都包括这个事件。

Paint事件的代理类型为PaintEventHandle,事件參数类型为PaintEventArgs。

在这个參数中包括了两个在处理Paint事件方面十分重要的属性:

·ClipRectangle,获取要在当中进行会话的矩形。

·Graphics,返回一个Graphics类实例,用于输出。

窗口和控件类提供了OnPaint虚拟方法来更方便地处理Paint事件,当触发Paint事件时会自己主动调用这种方法

GDI+入门——带你走进Windows图形的世界的更多相关文章

  1. MYSQL(基本篇)——一篇文章带你走进MYSQL的奇妙世界

    MYSQL(基本篇)--一篇文章带你走进MYSQL的奇妙世界 MYSQL算是我们程序员必不可少的一份求职工具了 无论在什么岗位,我们都可以看到应聘要求上所书写的"精通MYSQL等数据库及优化 ...

  2. Miox带你走进动态路由的世界——51信用卡前端团队

    写在前面: 有的时候再做大型项目的时候,确实会被复杂的路由逻辑所烦恼,会经常遇到权限问题,路由跳转回退逻辑问题.这几天在网上看到了51信用卡团队开源了一个Miox,可以有效的解决这些痛点,于是乎我就做 ...

  3. 走进windows编程的世界-----入门篇

    1   Windows编程基础 1.1Win32应用程序基本类型 1)  控制台程序 不须要完好的windows窗体,能够使用DOS窗体方式显示 2)  Win32窗体程序 包括窗体的程序,能够通过窗 ...

  4. 走进windows编程的世界-----画图相关

    Windows画图 1 图形绘制      1.1 图形绘制的方式      获取到画图句柄-设备描写叙述表(DC),使用对应的画图的API,在设备上绘制图形.          1.2 颜色     ...

  5. 走进windows编程的世界-----消息处理函数(2)

    一 WM_PAINT消息 1 WM_PAINT的产生   因为窗体的互相覆盖等,产生须要绘制的区域,那么会产生WM_PAINT消息.   普通情况下,不直接发送WM_PAINT消息,通过API声明须要 ...

  6. 走进windows编程的世界-----windows进程

    Windows进程  1 Windows进程    进程是一个容器,包括了一个应用程序实例的各种资源.Windows多任务的操作系统,因此能够同一时候运行多个进程.      2 Windows进程的 ...

  7. 走进windows编程的世界-----消息处理函数(1)

    Win32消息机制     过程驱动:程序是依照我们预先定义好的顺序运行.每运行一步,下一步都已经依照预定的顺序 继续运行,直至程序结束.     事件驱动:程序的运行顺序是无序的.某个时间点所运行的 ...

  8. 走进windows编程的世界-----消息处理函数(3)

    二 定时器消息 1 定时器消息 WM_TIMER   依照定时器设置时间段,自己主动向窗体发送一个定时器消息WM_TIMER. 优先级比較低.   定时器精度比較低,毫秒级别.消息产生时间也精度比較低 ...

  9. 走进windows编程的世界-----对话框、文本框、button

    1 对话框的分类  2 对话框的基本使用方式  3 对话框资源  4 有模式对话框的使用 int DialogBox( HINSTANCE hInstance, LPCTSTR lpTemplate, ...

随机推荐

  1. USACO Section 4.2 The Perfect Stall(二分图匹配)

    二分图的最大匹配.我是用最大流求解.加个源点s和汇点t:s和每只cow.每个stall和t 连一条容量为1有向边,每只cow和stall(that the cow is willing to prod ...

  2. 工作日志2014-06-10(实现C语言解析XML获得查询关键字)

    #include "GetInfo.h" ]; int GetInfoToWrite(char* path, char* domain,Write_t* pwrite); int ...

  3. C#对象赋值出现的诡异问题,或许你也遇到过,有待你的解决

    前言:今天在代码中,又出现了这个问题,就是对象赋值给一个新的对象时,然后更改新对象中的属性,就会把老对象的值也更改,以前也遇到这个问题,只是没有深究,今天刚好又遇到了此问题,我决定写下来,和大家一起分 ...

  4. SMT贴片红胶基本知识

    SMT贴片红胶是一种聚稀化合物,与锡膏不同的是其受热后便固化,其凝固点温度为150℃,这时,红胶开始由膏状体直接变成固体. SMT贴片机装贴贴片具有粘度流动性,温度特性,润湿特性等.根据红胶的这个特性 ...

  5. 使用netty构建一个socks proxy

    使用netty构建一个socks proxy   最近在做的项目,需要自己搭建一个socks代理.netty4.0附带了一个socks代理的样例,但是3.x就没有这个东西了,碰巧使用的又是3.7,就只 ...

  6. uva 719 Glass Beads(后缀自动机)

    [题目链接] https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=524&am ...

  7. data pump(数据泵)

    先给出oracle给出的一个定义: “Oracle Data Pump technology enables very high-speed movement of data and metadata ...

  8. java之Set源代码浅析

    Set的接口和实现类是最简单的,说它简单原因是由于它的实现都是基于实际的map实现的. 如 hashSet 基于hashMap,TreeSet 基于TreeMap,CopyOnWriteArraySe ...

  9. android 视频播放器的INTENT-FILTER属性

    <intent-filter>                   <action android:name="android.intent.action.VIEW&quo ...

  10. Linux下多线程查看工具(pstree、ps、pstack)

    转自:http://blog.csdn.net/yfkiss/article/details/6729364 1. pstree pstree以树结构显示进程 $ pstree -p work | g ...