windows编程(三)GDI入门(续)
2014-04-04 21:12
681 查看
之前学到了画线,已经学完了画直线,接下来我们接触到以下内容
<1>Polyline和PolylineTo画多条直线
<2>Arc和AcrTo画弧线
<3>常用图形的绘制
首先是Polyline和PolylineTo
这两个函数也挺好理解,相对于LineTo来说,可以画多条直线,当然,实现的功能用LineTo也一样可以实现。但是效率可能不够好。我们一样可以用SetPixel来画,但是我们不用,为什么?效率问题。PolylineTo和Polyline的区别就是点的问题,PolylineTo从当前目标开始到第一个点,Polyline从第一个点开始。入下图所示
代码如下:
接着,我们走到了Arc和ArcTo。看了这么多,有个to和没有个to的区别想必都知道了。这里我们就看Arc就行了。
Arc(HDC ,x1,y1,x2,y2,x3,y3,x4,y4);
我们首先了解下这几个坐标。(x1,y1)和(x2,y2)用来确定矩形的一条对角线,我们确定一个矩形,然后确定矩形的一个内接椭圆。这只是确定而已,没画出来,后面两个坐标的作用就是确定弧的范围,从椭圆中心向这两个点连虚拟线,然后和虚拟椭圆的交点就是确定的范围。如图所示:
这个图比较好的反应画弧的过程。我们还可以设置转的方向,可以上面是逆时针画弧,我们也可以通过设置实现顺时针画弧。调用SetArcDirection函数就行,伙伴们可以自己去尝试。结合上面的应该能理解,本人也是一边看书一边敲代码写的。学过windows编程,但是一到GDI这块直接跳过。GDI也是近期才开始接触。废话少写。上面代码如下,朋友们可以把函数的调用位置放在WM_PAINT消息的处理上
朋友们有没有想过如果后面两个点是相同的,会出现什么结果,没错,我们会得出一个椭圆。
在画线的时候,我们要注意到,如果线是虚线的话,当然,对于虚线只能设置为一个像素,设置大于一个像素显示的都是实现,如果画线是虚线,就会出现奇怪的现象,我们看下下图就知道了。
我们上面设置的明明是RGB(100,100,100)有木有,我们画出来的是白色的,仔细看看,实际上我们除了白色黑色外还有第三中颜色。那正是我们设置的颜色。那白色怎么冒出来了。因为windows画的虚线实际上也不是虚线,虚的部分用白色填充而已。前面我们在白色背景上当然看不出区别了。那我们怎么解决这个问题。我们可以通过SetBkMode(hdc,TRANSPARENT)来设置透明模式在我们上面的代码中,画线之前贴上这行代码就可以解决了。
看似万事俱备,我们可以开始画区域了。
看书的过程中,试了常见的几种区域图形函数的使用。都是调用API,难度不大。不过和前面讲的画线或多或少有些关联。具体代码如下,将下面函数在WM_PAINT消息中调用即可,当然,dc和rect得自己获取
效果见下图:
绘图和绘线个人觉得比较简单,但是代码还是要敲。不然就想当然了。下篇博文笔者将综合上面所讲,再结合自己分析《windows环境下32位汇编语言程序设计》中时钟的例子,用C语言实现同样的功能。以及比较重要的位图。
<1>Polyline和PolylineTo画多条直线
<2>Arc和AcrTo画弧线
<3>常用图形的绘制
首先是Polyline和PolylineTo
这两个函数也挺好理解,相对于LineTo来说,可以画多条直线,当然,实现的功能用LineTo也一样可以实现。但是效率可能不够好。我们一样可以用SetPixel来画,但是我们不用,为什么?效率问题。PolylineTo和Polyline的区别就是点的问题,PolylineTo从当前目标开始到第一个点,Polyline从第一个点开始。入下图所示
代码如下:
void DrawLine(HDC hdc, RECT rect) { HPEN pen = CreatePen(PS_SOLID,2,RGB(100 ,100, 100 )); SelectObject(hdc,pen); POINT point[5] = { 100,100, 600,100, 100,300, 600,300, 100,100 }; //Po MoveToEx(hdc,10,10,NULL); PolylineTo(hdc,point,sizeof(point)/sizeof(POINT)); //Polyline(hdc,point,sizeof(point)/sizeof(POINT)); TextOut(hdc,300,320,"polylineto",10); }
接着,我们走到了Arc和ArcTo。看了这么多,有个to和没有个to的区别想必都知道了。这里我们就看Arc就行了。
Arc(HDC ,x1,y1,x2,y2,x3,y3,x4,y4);
我们首先了解下这几个坐标。(x1,y1)和(x2,y2)用来确定矩形的一条对角线,我们确定一个矩形,然后确定矩形的一个内接椭圆。这只是确定而已,没画出来,后面两个坐标的作用就是确定弧的范围,从椭圆中心向这两个点连虚拟线,然后和虚拟椭圆的交点就是确定的范围。如图所示:
这个图比较好的反应画弧的过程。我们还可以设置转的方向,可以上面是逆时针画弧,我们也可以通过设置实现顺时针画弧。调用SetArcDirection函数就行,伙伴们可以自己去尝试。结合上面的应该能理解,本人也是一边看书一边敲代码写的。学过windows编程,但是一到GDI这块直接跳过。GDI也是近期才开始接触。废话少写。上面代码如下,朋友们可以把函数的调用位置放在WM_PAINT消息的处理上
void DrawLine(HDC hdc, RECT rect) { HPEN pen = CreatePen(PS_SOLID,2,RGB(100 ,100, 100 )); SelectObject(hdc,pen); POINT point[5] = { 100,100, 600,100, 600,400, 100,400, 100,100 }; //Po MoveToEx(hdc,10,10,NULL); //PolylineTo(hdc,point,sizeof(point)/sizeof(POINT)); Polyline(hdc,point,sizeof(point)/sizeof(POINT)); Arc(hdc,100,100,600,400,600,100,100,400); MoveToEx(hdc,100,100,NULL); LineTo(hdc,600,400); MoveToEx(hdc,100,400,NULL); LineTo(hdc,600,100); }
朋友们有没有想过如果后面两个点是相同的,会出现什么结果,没错,我们会得出一个椭圆。
在画线的时候,我们要注意到,如果线是虚线的话,当然,对于虚线只能设置为一个像素,设置大于一个像素显示的都是实现,如果画线是虚线,就会出现奇怪的现象,我们看下下图就知道了。
我们上面设置的明明是RGB(100,100,100)有木有,我们画出来的是白色的,仔细看看,实际上我们除了白色黑色外还有第三中颜色。那正是我们设置的颜色。那白色怎么冒出来了。因为windows画的虚线实际上也不是虚线,虚的部分用白色填充而已。前面我们在白色背景上当然看不出区别了。那我们怎么解决这个问题。我们可以通过SetBkMode(hdc,TRANSPARENT)来设置透明模式在我们上面的代码中,画线之前贴上这行代码就可以解决了。
看似万事俱备,我们可以开始画区域了。
看书的过程中,试了常见的几种区域图形函数的使用。都是调用API,难度不大。不过和前面讲的画线或多或少有些关联。具体代码如下,将下面函数在WM_PAINT消息中调用即可,当然,dc和rect得自己获取
void DrawDistrict(HDC hdc, RECT rect) { POINT point[6] = { 300,300, 400,250, 400,350, 300,300, 400,350, 400,600. }; HPEN pen = CreatePen(PS_SOLID,1,RGB(250 ,250, 250 )); SelectObject(hdc,pen); HBRUSH brush = CreateSolidBrush(RGB(100,100,100)); SelectObject(hdc,brush); Rectangle(hdc,50,50,200,200); RoundRect(hdc,210,50,360,200,10,10); Rectangle(hdc,370,50,520,200); Ellipse(hdc,370,50,520,200); Rectangle(hdc,530,50,530+150,200); Chord(hdc,530,50,530+150,200,530+160,50,300,530); Polygon(hdc,point,6); }
效果见下图:
绘图和绘线个人觉得比较简单,但是代码还是要敲。不然就想当然了。下篇博文笔者将综合上面所讲,再结合自己分析《windows环境下32位汇编语言程序设计》中时钟的例子,用C语言实现同样的功能。以及比较重要的位图。
相关文章推荐
- Windows界面编程之GDI一(入门篇)
- windows+SDK编程入门介绍
- 如何快速入门Windows编程
- Windows编程入门-设备环境句柄
- Windows编程入门(8)--MFC中ListBox控件的使用
- (转载)VS2010/MFC编程入门之五十一(图形图像:GDI对象之画刷CBrush)
- Windows网络编程入门:简单的客户端和服务器通信程序调试
- Windows下C语言网络编程快速入门
- windows编程入门之句柄 spy++
- windows编程入门之窗口的显示窗口
- Visual C++ 2008入门经典 第十二章 Windows编程的概念
- Windows RPC编程入门(已动手实践按红体字部分修改可以正常运行)
- WinMain - application entry point(windows图形编程入门)
- Windows编程基础与GDI绘图基本框架复习
- Windows网络编程入门:简单的客户端和服务器通信程序调试
- Windows编程入门-Windows消息机制
- Windows GDI绘图-入门篇
- Windows编程-windows GDI基本概念 画笔 画刷
- MFC入门之---Windows编程基本原理
- Windows GDI和GDI+编程实例剖析