码迷,mamicode.com
首页 > 编程语言 > 详细

MFC的坐标机制

时间:2015-08-10 22:00:25      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

参考文献:

作者: 刘涛 http://tech.sina.com.cn/s/2005-06-20/1143640450.shtml

一、基础知识
 
 

  (一)逻辑坐标。逻辑坐标与设备无关,缺省地,一个逻辑单位等于设备中的一个象素。它是实现“所见即所得”的基础。例如,当程序员调用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函数中指定的逻辑坐标映射为设备坐标。在下文中我们将介绍常用的映射方式。

 

 习惯上,我们将逻辑坐标所在的坐标系称为“窗口”;将设备坐标所在的坐标系称为“视口”。“窗口”依赖于逻辑坐标,可以是像素点、毫米或其他尺度。
 
知识点:

1、GDI函数,图像操作,画图等等几乎都是在逻辑坐标下进行。极个别有几个不是,比如GetDeviceCaps,是GDI函数,但用的设备坐标。由window完成从逻辑坐标转换为设备坐标的工作。

2、几乎所有的非GDI函数,都使用的设备坐标。另外,MFC接收到的消息,鼠标移动WM_MOUSEMOVE,鼠标点击WM_LBUTTONDOWN,还有窗口重绘WM_SIZE等等,都用的设备坐标。所以点击鼠标得到的点位置,一般需要使用DpToLp函数将其转换为逻辑坐标以后再使用。

3、不管对窗口和视口原点作什么改变,设备原点(0,0)始终是客户区的左上角。

4、设备原点(0,0)与视口原点(ViewPortOrg)不是一个概念,他俩默认是相同的,但使用SetViewPortOrg函数后,就不相同了。

 

Windows定义了的8种映射方式:

映 射 方 式 逻 辑 单 位 X 轴 增 加 Y 轴 增 加 毫 米
MM_TEXT 像 素 点 与 设 备 有 关
MM_LOMETRIC 0. 1mm 0.1
MM_HIMETRIC 0. 01mm 0.01
MM_LOENGLISH 0. 254mm 0.254
MM_HIENGLISH 0. 0254mm 0.0254
MM_TWIPS 0.0176mm 0.0176
MM_ISOTROPIC 任 意(x=y) 可 选 可 选 可 设
MM_ANISOTROPIC 任 意(x!=y) 可 选 可 选 可 设

 

 

 

 

MFC的坐标机制

标签:

原文地址:http://www.cnblogs.com/T-C-hong-dou/p/4719133.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!