1.什么是映射模式: 当Windows应用程序在其客户区绘制图形时,必须给出在客户区的位置,其位置用x和y
定的。
2.windows中为什么要用到映射模式机制? 映射模式的使用可以实现图形绘制的设备无关性。比如在默认MM_TEXT模式下,当你的显示器分辨 率由1024*768调为800*600时你会发现你绘制的一条直线会变短,而当你使用 度量映射方式 MM_LOMETRIC时你会发现不论是在哪种分辨率下,直线的长度都是不会变化的。这里面就主要是 依靠映射模进行转换的。同样,当你在调用一个画线的GDI函数LineTo,画出25.4mm(1英寸) 长的线时,若显示设备是一个300dpi的激光打印机,Windows将利用设定的映射模式自动将其转化为 300个像素点。
3.逻辑坐标点到设备坐标点的映射过程: 设备坐标(以客户区坐标为例)和逻辑坐标可以看成是两个互相平行的坐标系 原点(0,0)的垂影重合,坐标轴方向相同(单位可不一样哦,设备坐标的单位为像素,逻辑坐标的单位 为mm,inch,twip等)水平值从左到右增大,垂直值从上到下增大。在默认情况下(MM_TEXT模式) 两个坐标系下的点式垂直映射的。当使用其他映射方式时,比如在MM_LOMETRIC映射模式下,我们的 调用函数时使用的(x,y)坐标点为逻辑坐标点,通过以下两个公式可以将逻辑点转换为设备点 xViewport=(xWindow-xWinOrg)*(xViewExt/xWinExt)+xViewOrg yViewport=(yWindow-yWinOrg)*(yViewExt/yWinExt)+yViewOrg 然后在视口(设备坐标)中输出就可。 同时为了适应不同映射方式的需要,Windows提供了函数SetViewportOrgEx和SetWindowOrgEx 用来设置设备坐标系和逻辑坐标系的的映射方式,注意这里不是设置视口和窗口的原点,因为 设备坐标原点和逻辑坐标原点是不会变化的。(可以验证^_^。。。)
4. 映射模式的种类
这种映射模式被称为"文本"映射方式,不是因为它对于文本最合适,而是轴的方向与读文本的方向一 致。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的意思正相反。自定义映射模式中窗口和视口的原点和范围都可以改变, 程序员可以设置自己需要的映射模式。 |