专栏导航
上一篇:第5章,[Win32 章节] :边框绘制函数(一)
回到目录
下一篇:第5章,[Win32 章节] :边框绘制函数(三)
本节前言
对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点,请你自行查阅。
我呢,也会提到一部分的参考课节。但是呢,你不应该依赖于我的主动提及。最好呢,你自己能够多去了解和查看本专栏目录。
上一节,我们讲解了 Rectangle 函数。对于这个函数,我们需要对它作出一点说明,以便,你可以精准地了解其含义。
在理解矩形的绘制方式的时候,我见到过两种理解方式,一种呢,是《MFC Windows 程序设计》教材中的理解方式。《MFC Windows 程序设计》的作者是杰夫·普罗赛斯,所以呢,我们将这种理解方式称作普罗赛斯式理解。这种理解方式,也是本专栏采用的理解方式。
另一种理解方式,是《Windows 程序设计》的作者佩措尔德先生的理解方式,我们将其称作佩措尔德式理解。
本节,我们的任务,就是去讲解这第一种理解方式。普罗赛斯式理解方式,它也是本专栏所采用的理解方式。
一. 本专栏的理解方式
首先呢,我们来看下面的一张图。
图1
一般地,在客户区坐标系中,我们将客户区左上角的像素小方格的坐标,定义为(0,0)。这个像素点,也被称作客户区的坐标原点。原点往右一个格,它的客户区坐标是(1,0),再往右一个格的客户区坐标是(2,0)。
以客户区坐标原点为基准,往下一个格的客户区坐标为(0,1),再往下一个格是(0,2)。
如图1 所示,我们展示的,是 6 号列到 10 号列的像素 x 坐标的列与 11 号行到 14 号行的像素 y 坐标的行。
现在假定,我们要使用 Rectangle 函数来绘制一个矩形。
已知,Rectangle 函数的使用方法如下:
Rectangle (hdc, xLeft, yTop, xRight, yBottom);
也就是:Rectangle (设备环境句柄, 左, 上, 右, 下);
现在呢,我们这样子来调用函数:
Rectangle (hdc, 6, 11, 10, 14);
这样子去调用的话,形成的矩形,便是图1 中所示的,青色填充部分的矩形。当然了,实际画出来的,是外侧框线与内部的填充色,而青色填充区域的内部框线是不会画出来的。
(一)x 左和 x 右坐标值的含义
在 Rectangle (hdc, 6, 11, 10, 14) 调用中,hdc 后的第一个坐标和第三个坐标分别是 x 坐标的左和右坐标值。其中呢,x 左坐标值是 6,它是我们要去绘制的起始位置,整个的矩形,包含着这一个位置。x 右坐标值是 10,它是我们要去绘制的矩形的结束位置的下一个位置,整个的矩形,并不包含着这一位置。
也就是,我们指定的 x 坐标的左和右坐标值为 6 和 10,而绘制出来的矩形,所包含的像素列好,是 6,7,8,9,但是并不包含 10 号列像素,10 号列是结束列号的下一个列号,而整个绘制出来的矩形并不包含这个 10 号列。
假定,我们将 Rectangle 的调用改为 Rectangle (hdc, 60, 11, 100, 14),在这种情况下,hdc 后的第一个坐标和第三个坐标值分别为 60 和 100,也就是,x 左坐标值为 60,而 x 右坐标值为 100 。在这种情况下,绘制出来的矩形,它包含的像素列是 60,61,62,63,……99,而并不包含 100 号像素列。无论是说,hdc 之后的第三个坐标值,也就是 x 右坐标值,无论它的具体值是什么,它都并不被包含在绘制出来的矩形的像素列号之中,它是整个矩形所达不到的那个列号。
假定,我们写下这样的一个调用,Rectangle (hdc, x1, 10, x2, 20),并且 x1 < x2,那么,在这个调用之中,绘制出来的矩形,它所包含的像素列号,是 x1, x1+1, x1 +2, …… x2-1,是[x1, x2-1],而并不包含 x2 号像素列,x2 是整个的绘制出来的矩形未达到的像素列号。
到这里,对于 hdc 参数之后的第一个坐标和第三个坐标的含义,也就是 x 左坐标值和 x 右坐标值的含义,我们就讲完了。接下来,我们来讲解 hdc 参数之后的第二个和第四个坐标的含义。
(二)y 上和 y 下坐标值的含义
hdc 参数之后的第二个坐标的含义是矩形的上边的 y 坐标值,简称 y 上坐标值。hdc 参数之后的第四个坐标值,它是矩形的下边缘像素的下一个像素的 y 坐标值,简称 y 下坐标值。
与 x 左 和 x 右坐标值的含义类似,y 上坐标值,它是绘制出来的矩形的上边缘的起始。这一个起始像素行号,是包含在绘制出来的矩形之中的。
y 下坐标值,它是会指出来的矩形的下边缘的下一行的像素行号。这个结束行号,它是不包含在绘制出来的矩形之中的。
在案例之中,Rectangle (hdc, 6, 11, 10, 14) 调用的 y 上坐标值和 y 下坐标值分别为 11 和 14 。绘制出来的整个矩形,它所包含的像素行号是 11,12,13,而并不包含 14 号行。14 号行,它是绘制出来的矩形所未达到的一个像素行。但是呢,14 号行的上一行,13 号行,它是被包含在绘制出来的矩形之中的。
我们再给出来一个例子,Rectangle (6, 110, 10, 140),在这个调用里面,y 上坐标值和 y 下坐标值分别为 110 和140,则根据这个调用,绘制出来的矩形所包含的像素行号为 110,111,112,……139,但是不包含 140 号像素行。140 号像素行不包含在绘制出来的矩形之中,但是 140 号行的上一行,139 号行,是包含在绘制出来的矩形之中的。
我们再给出来一个例子,Rectangle (6, y1, 10, y2),且 y1 < y2 。在这个例子中,绘制出来的矩形,所包含的像素行,是 y1, y1+1, y1+2, y1+3, …… y2-1,也就是[y1, y2-1],而 y2 并不包含在内。
二. 学习要求
对于 Rectangle 调用的四个坐标值的理解,它是一个重点,但不是难点。
也许,我的话语,你会觉得啰嗦。但是呢,多看几遍,应该是能看懂的。
对于 Rectangle 函数的四个坐标值的含义,务必要掌握。因为,在以后,我们学习 Ellipse 函数的时候,也会涉及这四个坐标值,并且,Ellipse 的四个坐标值的含义,与 Rectangle 的四个坐标值的含义是一样的。
本节结束。下一节,我们来讲解佩措尔德式理解方法。
专栏导航
上一篇:第5章,[Win32 章节] :边框绘制函数(一)
回到目录
下一篇:第5章,[Win32 章节] :边框绘制函数(三)
网硕互联帮助中心

![P1014 [NOIP 1999 普及组] Cantor 表-网硕互联帮助中心](https://www.wsisp.com/helps/wp-content/uploads/2026/08/20260811104049-6a7afc31a3c58-220x150.png)




评论前必须登录!
注册