C++/GDI+ 学习笔记(二)——几个例子

原创 2007年10月09日 09:25:00

 1.     第一个例子——“Hello World!”

第一个最经典的例子当然是Hello World了:)
 
Graphics mygraphics(*pDC);               //创建一个Graphics对象
 
//创建一个笔刷第一项是透明度(0--255后三项是RGB
SolidBrush brush( Color(100,0,0,255) );   
 
FontFamily fontFamily(L"Latha");         //选择一种字体
 
Font font( &fontFamily, 1, FontStyleRegular,UnitInch );
     
PointF pointF(5,5);
mygraphics.DrawString( L"Hello Word!", -1, &font, pointF, &brush );
 
上面的例子就会显示出一行大大的“Hello World!”。
 

需要注意的是,Font的构造函数,里面的第二个参数是表示字体大小的。与过去不同,这里的单位不再是像素,而是一相对的长度单位em。常用于CSS里对距离,长度,字号等的定义。
它是参照于预先设置的一个值的。根据具体的使用环境不同,其标准值也不一样。
而且,这个参数是支持实数的,也就是说不必是整数。

 
 
2.     第二个例子——载入一副图片
 
Graphics imgraphics( *pDC );
//文件路径,需要注意的是GDI+的字符串参数都是宽字符的
Image image(L"001.jpg");  
imgraphics.DrawImage(&image,0,0);
 
很简单的就可以载入并显示出来一个jpg图片了。需要注意的是,GDI+的所有字符串参数,都是要宽字符的。
 

可以发现GraphicsGDI+中,的作用,有些象GDI种的CDC,不过不同的是,Graphics是设备无关的,所以我们不必在费神的考虑设备无关位图和设备相关位图的差别了。
同时,GDI+本身就支持非常多的图片格式,所以载入图片并显示的过程被大大简化了。需要注意的是,某些常用格式的图片本身还有很多差异,例如bmp图片就又被细分为16位,24位,32位,根据其保存的算法不同还分作压缩和非压缩的。根据掩码不同,16位又分成了多种格式。这些格式里就有很多是GDI+不支持的。

 
 
 
 
3.     第三个例子——绘制直线
 
Graphics Pathraphics( *pDC );
//创建一个矢量图形对象
GraphicsPath path;
          
Pen newPen( Color( 255, 0, 0 ), 3 );
//Path 增加一条直线, 可以增加多条。
path.AddLine( 0,0,100,100 );
 
Pathraphics.DrawPath( &newPen, &path );
 
 

GDI+Pen类还提供SetDashStyleSetDashPattern方法来设置画笔的预定义风格和自定义类型。其中,预定义风格可以有:DashStyleSolid(实线)DashStyleDash(虚线)DashStyleDot(点线) DashStyleDashDot(点划线)DashStyleDashDotDot(双点划线)DashStyleCustom(自定义类型)

 
 
Graphics Pathraphics( *pDC );
//创建一个矢量图形对象
GraphicsPath path;
          
Pen newPen( Color( 255, 0, 0 ), 3 );
newPen.SetDashStyle(DashStyleCustom); //自定义风格
 
REAL dashVals[4] = {
                 2, // 短划长为2
                 2 ,// 间隔为2
                 7, // 短划长为7
                 2 }; // 间隔为2
          
newPen.SetDashPattern(dashVals, 4);
 
//当连续增加时,效果是将所特有被增加的点连接起来。
path.AddLine( 0,0,100,100 );
path.AddLine( 200,100,200,50 );
 
Pathraphics.DrawPath( &newPen, &path );
 
 

经过少许的变化,这次画出了一条稍微复杂一点的线。利用一个简单的浮点数组来定义点线的周期,就可以画出不同的点划线了。
通过newPen.SetStartCap( LineCapArrowAnchor );
       newPen.SetEndCap( LineCapDiamondAnchor );
还能够设置线的端点的样式,例如箭头,圆等等

 

C++/GDI+ 学习笔记(二)——几个例子

第一个例子 Hello World! 第一个最经典的例子当然是Hello World了:) TAG: GDIPlus      1.     第一个例子——“Hello ...
  • hireboy
  • hireboy
  • 2013年05月29日 16:19
  • 3231

C++/GDI+ 学习笔记(一)——安装、配置&使用

使用GDI+很简单。需要做的有一下几个步骤。  1. 安装GDI+ SDK开发包。网上很多地方都有下载。解压到一个地方即可。  2. 设置编译器的包含路径,VC6的设置方法是 Tools/Opti...
  • hireboy
  • hireboy
  • 2013年05月29日 16:18
  • 6595

C++/GDI+ 学习笔记(三)——基础

使用GDI+的一些基础知识。对一些常用的类进行了简单的介绍。 TAG: GDIPlus     GDI+ 的主要画刷 SolidBrush 单色画...
  • hireboy
  • hireboy
  • 2013年05月29日 16:20
  • 3051

Hibernate学习笔记(一)——简单的Hibernate实例入门

一、Hibernate简介 Hibernate是一个开源的对象/关系映射(ORM)框架,它对JDBC进行了轻量级的封装。所谓ORM就是Object/Relationship Mapping,为什么要...
  • u011024652
  • u011024652
  • 2016年09月19日 20:32
  • 855

kafka学习笔记(2)

kafka的经典问题有这几个: 1.kafka节点之间如何备份? 2.kafka消息是否会丢失?为什么? 3.kafka最合理的配置是什么? 4.kafka的leader选举机制是什么? 5...
  • m0_37587447
  • m0_37587447
  • 2017年11月21日 15:37
  • 23

PCIe 学习笔记(二)

pci note 2 -v0.1 2014.11.18 *** draft  本文继续pci note 1, 介绍pci_create_root_bus函数, 内核版本为3.18-rc1 ...
  • scarecrow_byr
  • scarecrow_byr
  • 2014年12月01日 22:19
  • 1725

C++ Primer(第五版) 学习笔记

C++语言基础: 1. C++11增加了long long 类型,表示最小尺寸为64的整数。 2. 浮点数运算使用double,通常运算速度更快。 3. 超过int容量时使用long long类型,无...
  • zxh2075
  • zxh2075
  • 2016年10月25日 15:56
  • 413

网络编程学习笔记整理(二)

摘录笔记 《TCP/IP高效编程 改善网络程序的44个技巧》socket的创建函数int socket (int domain,int type, int protocol)参数说明protocol需...
  • stecdeng
  • stecdeng
  • 2017年02月23日 14:47
  • 189

C++学习笔记(一)

C++学习笔记(一)
  • zaibianchange
  • zaibianchange
  • 2016年10月26日 22:28
  • 96

密码学学习笔记

1.流密码每次加密数据流的一位或一个字节,分组密码是将一个明文分组作为整体加密并且通常得到的是与明文等长的密文分组。 2.现在使用的大多数对称分组加密算法都是基于Feistel分组密码结构的。...
  • u011130578
  • u011130578
  • 2015年12月22日 13:57
  • 794
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++/GDI+ 学习笔记(二)——几个例子
举报原因:
原因补充:

(最多只允许输入30个字)