看windows程序第五章GDI编程部分。一直卡壳在这里了。

下面我来说下自己的想法。看是否对您有帮助。

首先我们来看一个图。

SetPolyFillMode(ALTERNATE);  // 系统默认就是这种填充模式

如图所示:数字代表绘制图形点的先后次序。

现在。我们先从外面假设来一条射线,(当然了。我看到很多文章。说的都是屏幕水平方向的扫描线。)

对于这种模式。射线穿过奇条边框线时,则填充该边框线区域,穿过偶数条边框线时,则不填充。

大家对照上图的射线。很简单的就理解了“ALTERNATE”填充模式。

下面重点是“WINDING”填充模式:

继续看图:

对于射线穿过奇数边框线时,填充模式同ALTERNATE, 唯一不同的就是在穿过偶数条边框线时。要作另外的判断。

怎么判断偶数边的时候呢?

首先我们假想一下:在图中。垂直画一条线。向上为正。向下为负。对于WINDING填充模式。判断是否填充区域就是按照:遇到“封闭区域”偶数条边框线的时候。我们就要

看所有边框线的方向计数了。如果边框线向上。则计数加1.如果向下。则计数减1.只有计数不等于0 的时候,才填充偶数边框线封闭区域。

最后在附张图作最后说明:

对于A来说。射线穿过的第一条边框线为奇数。所以按照“ALTERNATE”来填充。

穿过第二条边框线的时候。为偶数。就要开始算边框线的方向计数了。我们可以看到第一条边框线向上。我们+1。第二条也向上。在+1;不等于0。则填充了。

穿过第三条边框线。又是奇数。所以继续按照"ALTERNATE"来填充。

好了。重点来了。第四条边框线出现了。也就是没有填充的D区域。我们来算下它的所有边框线的方向计数是多少。

+1、+1、-1、-1;看到没。前两条边框线都向上。后两条都向下。最后计数等于0.就不填充该区域了。

有了上面的解释。我们在来看《windows 程序设计》第五版 中的图,是不是很好懂了。

windows 程序设计 SetPolyFillMode关于ALTERNATE、WINDING的详细解释的更多相关文章

  1. windows系统中的dll的作用详细解释

    什么是.DLL文件? DLL 是一个包含可由多个程序同时使用的代码和数据的库.例如,在 Windows 操作系统中,Comdlg32 DLL 执行与对话框有关的常见函数.因此,每个程序都可以使用该 D ...

  2. Windows程序设计画图实现哆啦A梦

    在看雪论坛上看到的一个帖子,很喜欢,转载一下.原文地址:http://bbs.pediy.com/showthread.php?t=138630哆啦A梦是画出来的,不知道作者算这些坐标位置算了多久,真 ...

  3. Windows程序设计--(五)绘图基础

    5.1 GDI的结构 图形设备接口(GDI:Graphics Device Interface)是Windows的子系统,它负责在视讯显示器和打印机上显示图形. 5.2 设备环境 5.2.1 获取设备 ...

  4. Windows程序设计学习笔记(一)Windows内存管理初步

    学习Windows程序设计也有一些时间了,为了记录自己的学习成果,以便以后查看,我希望自己能够坚持写下一系列的学习心得,对自己学习的内容进行总结,同时与大家交流.因为刚学习所以可能有的地方写不不正确, ...

  5. Windows 程序设计

    一.Win32 API /******************************************************************** created: 2014/04/1 ...

  6. 关于《Windows程序设计(第五版)》中一个实例程序的疑问

    最近一直在看Charlse Petzold的<Windows程序设计>,作为一个新得不能再新的新手,只能先照着书的抄抄源码了,之前的例子一直都很正常,但昨天遇到一个很诡异的BUG. 先看实 ...

  7. windows 程序设计自学:添加图标资源

    #include <windows.h> #include "resource.h" LRESULT CALLBACK MyWndProc( HWND hwnd, // ...

  8. windows程序设计笔记

    2014.05.06 新建一个visual C++ -- 常规 -- 空白 的项目,用.c后缀名指定这是一个用C语言来写的windows项目.和C语言的hellworld程序做了一个比较,按照wind ...

  9. 《Windows程序设计第5版》学习进度备忘

    书签:另外跳过的内容有待跟进 __________________学习资源: <Windows程序设计第5版珍藏版> __________________知识基础支持: _________ ...

随机推荐

  1. Mouse_event 鼠标点击

    //这样就是左键单击 mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );// 按下mouse_event( MOUSEEVENTF_LEFTUP, 0, ...

  2. 通过tracing技术来教授操作系统

    https://www.cl.cam.ac.uk/teaching/1516/L41/materials.html https://github.com/myaut/dtrace-stap-book

  3. IOS 小技巧积累

    转自:http://blog.csdn.net/mars2639/article/details/7352012 1. 使用@property和@synthesize声明一个成员变量,给其赋值是时要在 ...

  4. 关于MIUI悬浮窗权限问题的解决方案

    先扯会....好久没写Blog了....这段时间有点小忙...瞎忙.....忙的自己都感觉都不应该.....严重影响了生活质量......生活的幸福指数!!!.....到现在还特么的单身!!!求介绍啊 ...

  5. 图形化管理debian服务

    bootupmanager这个软件 ,用着勉强吧, 功能不多. 安装 sudo apt-get install bum 卸载sudo apt-get remove --purge bum 多了不说 , ...

  6. 用count(*)还是count(列名) || Mysql中的count()与sum()区别

    Mysql中的count()与sum()区别   首先创建个表说明问题 CREATE TABLE `result` (   `name` varchar(20) default NULL,   `su ...

  7. hive-安装MySQL(centos6.4)

    为安装hive做准备,以前装过无数次,在线的.tar包的,一直不用忘得差不多了. centos6.4 虚拟机 先看有没有装,有的话应该是自带的,卸载就可以了 命令分别是 然后在线安装,命令是 (-y是 ...

  8. Windows 之 获取管理员权限

    新建文本文档,写入如下内容: Windows Registry Editor Version 5.00 [-HKEY_CLASSES_ROOT\*\shell\runas] [HKEY_CLASSES ...

  9. C#当前应用程序路径及环境变量

    一.获取当前文件的路径 1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 获取模块的完整路径.可获得当前执行的 ...

  10. android开发之路10(文件的读写)

    1.安卓中文件的数据存储实例(将文件保存到手机自带存储空间中): ①MainActivity.java public class MainActivity extends Activity imple ...