基于V C++的GDI 常用坐标系统及应用 在Windows 应用程序中,只要进行绘图,就要使用GDI 坐标系统。Windows 提供了几种映射方式,每一种映射都对应着一种坐标系。例如,绘制图形时,必须给出图形各个点在客户区的位置,其位置用x 和y两个坐标表示,x 表示横坐标,y表示纵坐标。在所有的GDI 绘制函数中,这些坐标使用的是一种“逻辑单位”。当GDI 函数将结果输出送到某个物理设备上时,Windows 将逻辑坐标转换成设备坐标(如屏幕或打印机的像素点)。本文讨论了图形环境中的各个映射模式,包括它们是什么,怎么工作的,以及它们真正的含义。 一、基础知识 (一)逻辑坐标。逻辑坐标与设备无关,缺省地,一个逻辑单位等于设备中的一个象素。它是实现“所见即所得”的基础。例如,当程序员调用LineTo 函数绘制25.4mm(1 英 寸) 长的直线时,他只要使用合适的映射模式,那么就并不需要考虑输出的是何种设备。若设备是VGA 显示器,Windows 自动将其转化为 96 个像素点;若设备是一个300dpi 的激光打印机,Windows 自动将其转化为 300 个像素点。 (二)设备坐标。图形输出时,Windows 将GDI 函数中指定的逻辑坐标映射为设备坐标,在所有的设备坐标系统中,单位以像素点为准,水平值从左到右增大(正方向向右),垂直值从上到下增大(正方向向下)。Windows 中包括以下 3 种设备坐标,以满足各种不同需要: 1、客户区域坐标,包括应用程序的客户区域,客户区域的左上角为(0, 0)。 2、屏幕坐标,包括整个屏幕,屏幕的左上角为(0, 0)。屏幕坐标用在WM_MOVE 消息中(对于非子窗口)以及下面的Windows 函数中:CreateWindow 和MoveWindow(都对于非子窗口)、GetMessage、GetCursorPos、GetWindowRect、WindowFromPoint 和SetBrushOrg 中。 用函数ClientToScreen 和ScreenToClient 可以将客户区域坐标转换成屏幕区域坐标,或反之。 3、全窗口坐标,包括一个程序的整个窗口,包括标题条、菜单、滚动条和窗口框,窗口的左上角为(0,0)。使用GetWindowDC 得到的窗口设备环境,可以将逻辑单位转换成窗口”坐标。 (三)映射。映射方式定义了Windows 如何将GDI 函数中指定的逻辑坐标映射为设备坐标。在下文中我们将介绍常用的映射方式。 此外,习惯上,我们将逻辑坐标所在的坐标系称为“窗口”;将设备坐标所在的坐标系称为“视口”。“窗口”依赖于逻辑坐标,可以是像素点、毫米或其他尺度。这一点请牢记,这...