表3-2-2 ScreenToClient 函数
| 用 途 | 将给定点的屏幕坐标转换为用户区坐标。 | ||||||||
| 原 型 |
| ||||||||
3.4、映射方式
影响在用户区绘图的一个主要设备对象属性是“映射方式”。他定义了Windows如何将GDI函数中使用的逻辑坐标映射为设备坐标。其他四个设备对象属性(窗口原点、视区原点、窗口范围和视区范围)都和映射方式密切相关。当Windows将逻辑单位转换为设备单位或象素时,映射方式、窗口原点和视区原点、窗口范围和视区反问决定着这种转换。映射方式也隐含了x轴坐标和y轴的原点和方向。在介绍各种映射方式之前,我们先介绍窗口和视口关系。
3.4.1 窗口和视口
视口是电脑屏幕上一块显示区域,随着在GDI中所使用的设备对象句柄的不同,该区域可是用户区、全窗口区或整个屏幕区,视区中的图像一设备单位定义。和视区中显示的图像相对应的原始图像区域称为窗口。注意,在这里使用的术语“窗口”不是指屏幕上显示的可视窗口对象。这里的“窗口”是从现实世界角度所看到图像,而“视区”是从数据世界角度而言的,是屏幕上的象素形成的图像。在Windows中,视区不是个裁剪区。图3-2和图3-3说明了窗口和视口的关系。
|
| ||||||||||||||
映射方式指的是从“窗口”(逻辑坐标)到“视区”(设备坐标)的变换。“视区”采用设备坐标(象素数)。“窗口”采用逻辑坐标,他能够是象素数、毫米、英寸或任何其他单位。GDI函数使用逻辑坐标。
将“窗口”(逻辑)坐标转换为“视区”(设备)坐标,使用如下两个映射方式:
|
xViewport = (xWindow - xWinOrg) * xViewExt / xWinExt xViewOrg |
|
yViewport = (yWindow - yWinOrg) * yViewExt / yWinExt yViewOrg |
该公式将逻辑坐标系中的点(xWindow, yWindow)变换为设备坐标系中的点(xViewport, yViewport),其中,点(xWinOrg, yWinOrg)是以逻辑单位表示的“窗口”原点,而点(xViewOrg, yViewOrg)是以设备坐标表示的“视区”原点。在缺省情况下,这两个点被配置为(0, 0),但他们能够被改变。注意,逻辑点(xWinOrg, yWinOrg)总是被映射为设备点(xViewOrg, yViewOrg)。
改变上述的公式为:
|
xWindow = (xViewport - xViewOrg) * xWinExt / xViewExt xWinOrg |
|
yWindow = (yViewport - yViewOrg) * yWinExt / xViewExt yWinOrg |
该公式能够将视区坐标转换为窗口坐标。
表3-3-1 DptoLP 函数






