专栏导航
下一篇:无
本节前言
对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点,请你自行查阅。
我呢,也会提到一部分的参考课节。但是呢,你不应该依赖于我的主动提及。最好呢,你自己能够多去了解和查看本专栏目录。
之前,我们讲解过屏幕坐标系与 MM_TEXT 映射模式之下的客户区坐标系的知识。学习本节,需要你首先已具备这两种坐标系的知识基础。
关于屏幕坐标系与 MM_TEXT 映射模式之下的客户区坐标系的知识,请参考下述两个文章链接。
参考课节:第3章,[标签 Win32] :Windows 坐标系,屏幕坐标系
参考课节:MM_TEXT 映射模式下的客户区坐标系
在你确保已掌握了上述两个参考文章的内容的基础上,你可以往下学习本节内容。
我们开始。
一. 窗口坐标系
屏幕坐标系,是以整个计算机显示屏作为显示区域的。在屏幕坐标系中,原点在显示器的左上角的像素点的位置。屏幕坐标系的原点是(0,0)。
至于窗口坐标系,实话说,我也并不是很熟悉这一坐标系。因为,在学习 Windows API 编程与 MFC 编程基础的时候,几乎不咋用这一坐标系。常用的,还是客户区坐标系。
在这里,我说一说我所认识的窗口坐标系。
在使用 GDI 函数的时候,我们程序员在代码中给出的(x,y)坐标对,叫做逻辑坐标。在窗口坐标系里面,我们程序员给出的逻辑坐标,它与窗口坐标系的物理坐标是一致的。
在窗口坐标系里面,x 坐标值与 y 坐标值的 1 个单位,为 1 个物理像素。
在窗口坐标系里面,坐标系的原点,位于整个窗口的左上角的像素点,此原点的坐标为(0,0)。对于某一个坐标对(x,y),x 值代表此像素点相对于坐标原点,向右边偏移 x 个像素的位置;y 值代表此像素点相对于坐标原点,向下偏移 y 个像素的位置。
注意哦,这里所说的整个窗口,它包括的是整个的窗口,包括客户区、状态栏、工具栏、滚动条、标题栏、菜单栏等等的全部的区域。
当使用客户区坐标系绘制文本与图形的时候,我们只可以将图形与文本绘制在客户区之中。而当我们使用窗口坐标系的时候,我们就可以将绘图范围扩大一些了,我们可以在整个窗口中,除标题栏之外的任意位置绘图。也就是说,通过使用窗口坐标系,我们可以在工具栏、菜单栏等等的位置绘制一条直线,我们也可以依然将这条直线绘制在窗口的客户区之中。当然了,你也可以用窗口坐标系,来绘制一个跨越客户区、工具栏、标题栏等等区域的一个图形。
窗口坐标系的特点是,使用它,你可以在整个窗口的除标题栏之外的任意位置绘图。
我们试着使用窗口坐标系来绘制一条直线。
图1
如图1 所示,我们已经绘制了一条直线。这条竖线,跨越了菜单栏、工具栏、客户区、状态栏。
图1 所示的程序,是我用 MFC 编写的。以后,我们学习到 MFC 的相关章节的时候,我若是没忘记的话,那么,我会领大家画图1 所示的直线的。
有一点需要注意,窗口坐标系的原点(0,0),它是整个窗口的左上角的像素点。也就是,它其实应该是位于标题栏的左上角的。不过呢,在使用窗口坐标系的时候,画图涉及标题栏区域的时候,不会显示出来,但是文本或图形可以在除标题栏之外的其余位置正常显示。
也就是说,使用窗口坐标系的时候,相当于有一个裁剪区域,这个裁剪区域是除标题栏之外的窗口区域。你在绘制图形与文本的时候,可以让绘图对象的一部分位于标题栏之中,但是,位于标题栏的部分不属于裁剪区域,因此,标题栏部分的图形与文本是不显示的,而标题栏之外的部分的图形与文本,是可以正常显示的。
二. 窗口坐标系与屏幕坐标系的区别
其实区别不大。窗口坐标系与屏幕坐标系,最主要的区别是,坐标原点不同。屏幕坐标系的坐标原点,是在整个显示器的显示区域的左上角的像素点的位置。而窗口坐标系的坐标原点,是在程序窗口的左上角的位置,其实也就是位于标题栏里面。
总 结
本节内容,应该是不难。
好好学吧。
专栏导航
下一篇:无