GDI映射方式

来源:互联网 发布:淘宝精仿鞋店推荐2016 编辑:程序博客网 时间:2024/06/05 23:25

在几乎所有GDI函数中,坐标值使用的都是一种“逻辑单位”。
Windows必须将逻辑单位转换为“设备单位”。这种转换是由映射方式、窗口和视口的原点以及窗口和视口的范围所控制的。


表 windows的8种映射方式


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

屏幕坐标
屏幕的左上角为(0,0)点,屏幕坐标用在WM_MOVE消息(对于非子窗口)以及下列Windows函数中:CreateWindowMoveWindow都是对于非子窗口)、GetMessagePos、GetCursorPos、SetCursorPos、GetWindowRect以及WindowFromPoint这不是全部函数的列表)。它们或者是与窗口无关的函数(如两个光标函数),或者是必须相对于某个屏幕点来移动(或者寻找)窗口的函数。


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


客户区坐标  
点(0,0)是客户区的左上角。当使用GetDCBeginPaint取得设备内容时,GDI函数中的逻辑坐标就会内定转换为客户区坐标。


对于所有的映像方式,Windows都用下面两个公式来将窗口(逻辑)坐标转化为视口(设备)坐标:


    其中,(xWindow,yWindow)是待转换的逻辑坐标点,(xViewport,yViewport)是转换后的设备坐标点,一般情形下差不多就是客户区坐标

   (xWinOrg,yWinOrg)是逻辑坐标的窗口原点;(xViewOrg,yViewOrg)是设备坐标的视端口原点

   xWinExt,yWinExt)是逻辑坐标的窗口范围(xViewExt,yViewExt)是设备坐标的窗口范围。

   在多数方式映射中,范围是映射方式所隐含的,不能够改变。

Windows用以下公式将视口设备)坐标转换为窗口(逻辑)坐标: