鱼C论坛

 找回密码
 立即注册
查看: 4196|回复: 3

[扩展阅读] 第025讲:设备坐标系统(课文解读)

[复制链接]
发表于 2015-9-7 23:00:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下解读来自《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) 是客户区左上角。调用 GetDCBeginPaint 函数获取设备环境时,在 GDI 函数中的逻辑坐标将被默认转换为客户区坐标。

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-19 23:26:16 | 显示全部楼层
三类,是屏幕坐标,窗口坐标,客户区坐标吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-5 21:00:31 | 显示全部楼层
为什么只有25讲的课件和源代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-4-5 20:17:06 | 显示全部楼层
太感谢了,论坛里的“教辅”资料很有用!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 00:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表