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) 可 选 可 选 可 设

MM_TEXT映射模式这种映射模式被称为"文本"映射方式,不是因为它对 于文本最合适,而是轴的方向与读文本的方向一致。Windows提供了函数SetViewportOrg和SetWindowOrg 用来设置视口和窗口的原点。缺省的窗口原点和视口原点均为(0,0),可以改变;缺省的窗 口范围和视口范围均为(1,1),不可改变。

度量映射方式MM_LOMETRIC、MM_HIMETRIC、MM_LOENGLISH、MM_HIENGLISH和MM_TWIPS 将1个逻辑单位映射为固定的实际单位,其中1twip等于0.0176mm(1/1440英寸)。其他映射模式对应的物理单位参见表1。设置了映射模式以后,Windows自动设置了窗口及视口的范围,范围本身的值并不重要,但范围比是一个固定的值,对于MM_LOMETRIC,Windows计算范围比xViewExt/xWinExt=0.1mm中水平像素的点数。

自定义映射模式MM_ISOTROPIC和MM_ANISOTROPIC两种映射模式允许程序员设置自己的窗口和视口范围。MM_ISOTROPIC和MM_ANISOTROPIC的区别是所设置的x轴和y轴的的范围必须相同,而MM_ANISOTROPIC所设置的x轴和y轴的的范围可以不同。isotropi的意思是" 在所有方向相同",anisotropic的意思正相反。自定义映射模式中窗口和视口的原点和范围都可以改变,程序员可以设置自己需要的映射模式。函数SetWindowExt和SetViewportExt 用于改变窗口和视口的范围。下面的代码将1个逻辑单位映射成0.396mm(1/64英寸)。

SetMapMode(hDC,MM_ISOTROPIC);

SetWindowExt(64,64);

SetViewportExt(hdc,GetDeviceCaps(hdc,LOGPIXELSX),GetDeviceCaps(hdc, LOGPIXELSY));

CDC 类的DPtoLP()函数是什么意思?

将设备坐标转化为逻辑坐标  
 你可以用CDC的成员函数:  
 CDC::SetMapMode()改变视图的坐标模式  
 比如,我们缺省情况下是MM_TEXT方式,坐标原点是在客户区的左上角,  
 x轴向右,y轴向下,每一点对应是一个象素点  
 但你可以改成其他模式,比如MM_LOMETRIC    
 它的y轴是向上的,坐标还是左上角  
 但是每一点对应是0.1毫米  
 如果我把模式改成MM_LOMETRIC,但是很多时候我们只能获得设备坐标  
 比如你用GetClientRect得到的就还是MM_TEXT方式下的坐标  
 如果你用DPtoLP()就可以转换成以0.1mm为单位了

(0)

相关推荐