小甲鱼 发表于 2015-9-7 23:00:56

第025讲:设备坐标系统(课文解读)

以下解读来自《Windows 程序设计》(第5版 珍藏版)P146

注:内容略有改版,如有纰漏,请严格指正!

Windows 会将 GDI 函数中指定的逻辑坐标转换为设备坐标。在我们讨论用于各种映射模式的逻辑坐标系统之前,首先介绍一下 Windows 为视频显示器定义的三种设备坐标系统。在大多数情况下,我们都在窗口的客户区内工作(默认设备坐标系统),但是在某些特殊情况下,Windows 还使用另外两种设备坐标系统。尽管如此,在所有的设备系统中,单位都是以像素的形式表示的。水平方向上 x 值从左向右增加,垂直方向上 y 值从上往下增加。

当我们使用整个屏幕时,我们是以“屏幕坐标”(screen coordinate)的形式工作的。以屏幕左上角为点 (0, 0)。屏幕坐标用于 WM_MOVE 消息(对非子窗口)和下列的 Windows 函数中:CreateWindow 和 MoveWindows(对非子窗口)、GetMessagePos、GetCursorPos、SetCursorPos、GetWindowRect 和 WindowFromPoint。(这并不是一个完整的清单)这些函数一般分两类:一类是与窗口无关的函数(例如两个和鼠标指针相关);另一类是必须根据屏幕上的点移动或寻找窗口的函数。如果使用带“DISPLAY”参数的 CreateDC 函数来获取整个屏幕的设备环境,那么在 GUI 调用中,逻辑坐标值将默认映射到屏幕坐标。

“全窗口”坐标指的是一个应用程序的整个应用窗口,包括标题栏、菜单、滚动条和边框。对一个普通的应用窗口,点 (0, 0) 是边框的左上角。全窗口坐标在 Windows 中很少用,但是如果设备环境是从 GetWindowsDC 函数获取的,则在 GDI 函数调用中,逻辑坐标会被默认映射为全窗口坐标。

第三种设备坐标系统(也是我们最常使用的坐标系统)是“客户区坐标”。点 (0, 0) 是客户区左上角。调用 GetDC 或 BeginPaint 函数获取设备环境时,在 GDI 函数中的逻辑坐标将被默认转换为客户区坐标。

可以使用 ClientToScreen 函数将客户区坐标转换到屏幕坐标,反之,调用 ScreenToClient 函数把屏幕坐标转换到客户区坐标。也可以调用 GetWindowRect 函数以屏幕坐标的形式获取整个窗口的位置和大小。这三个函数为把任何一种设备坐标转换为另一种设备坐标提供了足够的信息。

WinSDK

fishermanmax 发表于 2017-1-19 23:26:16

三类,是屏幕坐标,窗口坐标,客户区坐标吗{:10_266:}

余浪e 发表于 2017-7-5 21:00:31

为什么只有25讲的课件和源代码

AnisHan 发表于 2022-4-5 20:17:06

太感谢了,论坛里的“教辅”资料很有用!!
页: [1]
查看完整版本: 第025讲:设备坐标系统(课文解读)