设备坐标和逻辑坐标

Windows 对所有消息(如 WM_MOVE,WM_SIZE 和 WM_MOUSEMOVE),对所有非 GDI 函数,甚至对一些 GDI 函数,永远使用设备坐标。

由于映射方式是一种设备描述表属性,所以,只有对需要设备描述表句柄作参数的 GDI 函数,映射方式才会起作用。

Windows 将 GDI 函数中指定的逻辑坐标映射为设备坐标。

所有设备坐标系都以像素为单位,水平轴(即x轴)上的值从左到右递增,垂直轴(即y轴)上的值从上到下递增。
设备坐标系包括:“屏幕坐标”、“整窗口坐标”和“客户区坐标”。

屏幕坐标:
当我们使用整个屏幕时,就根据“屏幕坐标”进行操作。屏幕的左上角为(0,0)点,屏幕坐标用在 WM_MOVE 消息(对于非子窗口)以及下列 Windows 函数中:CreateWindow 和 MoveWindow(都是对于非子窗口)、GetMessagePos,GetCursorPos,SetCursorPos,GetWindowRect,以及 WindowFromPoint(这不是全部函数的列表)。
如果以 DISPLAY 为参数调用 CreateDC ,以获取整个屏幕的设备描述表,则默认情况下 GDI 调用中指定的逻辑坐标将被映射为屏幕坐标。

整窗口坐标:
“整窗口坐标”以程序的整个窗口为基准,如标题栏、菜单、滚动条和窗口框都包括在内。而对于普通窗口,点(0,0)是缩放边框的左上角。
整窗口坐标在 Windows 中极少使用,但是如果用 GetWindowDC 获取设备描述表,GDI 函数中的逻辑坐标就会转换为客户区坐标。

客户区坐标系:
点(0,0)是客户区的左上角。当使用 GetDC 或 BeginPaint 获取设备描述表时,GDI 函数中的逻辑坐标就会默认地转换为客户区坐标。

设备坐标系之间的转换:
用函数 ClientToScreen 和 ScreenToClient 可以将客户区坐标转换为屏幕坐标,或者反过来,将屏幕坐标转换为客户区坐标。
可以使用 GetWindowRect 函数获取屏幕坐标下的整个窗口的位置和大小。

posted on 2012-01-06 11:15 梦五 阅读(484) 评论(0)  编辑 收藏 引用 所属分类: Windows相关


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年12月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜