第5章,[Win32 章节] :绘制直线(二)

📅 2026/7/10 22:56:10 👁️ 阅读次数 📝 编程学习
第5章,[Win32 章节] :绘制直线(二)

专栏导航

上一篇:第5章,[Win32 章节] :绘制直线(一)

回到目录

下一篇:第5章,[Win32 章节] :绘制直线(三)

本节前言

对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点,请你自行查阅。

我呢,也会提到一部分的参考课节。但是呢,你不应该依赖于我的主动提及。最好呢,你自己能够多去了解和查看本专栏目录。

学习本节之前,需要先学习以下的先修课节。

参考课节:第5章,[Win32 章节] :绘制直线(一)

本节内容,主要来自于对佩措尔德原教材的大段抄录。

我们开始。

一. 本节内容

为了画一条直线,必须调用两个函数。第一个函数用来指定直线的起点,第二个函数用来指定直线的终点。

MoveToEx (hdc, xBeg, yBeg, NULL); LineTo (hdc, xEnd, yEnd);

MoveToEx 实际上没有画任何东西,只是设置设备环境的 “当前位置” 属性。接着,LineTo 函数在指定线段的终点的同时,在当前位置和终点之间绘制一条直线。当前位置可以认为是某些 GDI 函数绘制的起始点。在默认的设备环境中,点 (0, 0)为最初设定的当前位置。如果没有设定当前位置,那么调用 LineTo 函数就从客户区的左上角开始画线。

让我们回顾一下历史,在 16 位版本的 Windows 中,设置当前位置的函数是 MoveTo 。这个函数仅有三个参数:设备环境句柄,x 坐标和 y 坐标。函数的返回值是运行该函数之前的当前位置,它是一个由两个 16 位的值拼合的 32 位无符号整型数值。然而,在 32 位版本的 Windows 中,坐标值本身就是 32 位。由于 32 位版本的 C 没有定义 64 位的整型数据类型,所以这种变化也就意味着 MoveTo 不能够在返回值上表示先前的当前位置了。MoveTo 函数的返回值在实际的程序设计中几乎从来不会使用,因此就需要一个新的函数 MoveToEx 。

MoveToEx 函数的最后一个参数是一个指向 POINT 结构的指针。从 MoveToEx 函数返回后,POINT 结构的 x 和 y 字段表示运行该函数之前的当前位置。如果不需要这些信息(通常也是如此),可以像上面的例子所示的那样设置最后一个参数为 NULL 。

警告:尽管在 Windows 98 中出现的坐标值都是 32 位的,但是仅有 16 位被利用,因此坐标值的大小实际上是在 -32768 到 32767 之间。在 Windows NT 中,这 32 位数值都被使用。

通过调用下面的函数可以获取当前位置。

GetCurrentPositionEx (hdc, &pt);

这里的 pt 是一个 POINT 结构。

专栏导航

上一篇:第5章,[Win32 章节] :绘制直线(一)

回到目录

下一篇:第5章,[Win32 章节] :绘制直线(三)