⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 11.1.3 逻辑坐标和设备坐标.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
11.1.3 逻辑坐标和设备坐标
几乎在所有 GDI函数中使用的坐标值都采用是的逻辑单位。 Windows必须将逻辑单位转换为"设备单
位气即像素。这种转换是由映射方式、窗口和视口的原点,以及窗口和视口的范围所控制的。例如
下面这条在窗口中输出文本的 TextOut语句:
dc->TextOut(O. 100. "text"); 
该函数的参数值 (0,100)采用的就是逻辑单位,当程序运行后,在窗口中真正显示文本时,该参数
值需要被转换为设备单位,而且转换的结果由映射方式、窗口和视口的原点,以及窗口和视口的范
围控制。 
Windows对所有的消息(如WM SIZE、WM_MOUSEMOVE、WM_LBUTTONDOWN、 WM_LBUTTONUP),所有的非GDI
函数和一些GDI函数(例如GetDeviceCaps函数),永远使用设备坐标。
1.映射模式 
Windows提供的映射模式如表11.1所示。默认映射模式为MM_TEXT.在此映射模式下,逻辑单位和设备
单位相同,这时将逻辑坐标值 (0,100)转换为设备坐标后,它的值仍是 (0,100)。映射模式的改
变可以通过SetMapMode函数来实现。
表11 .1 映射模式

映射模式 说明 
MM_ANISOTROPIC  逻绕单位被转换为任意单位,其中轴可以被随意缩放。将映射模式设置为
MM_ANlSIOTROPIC 不会改变当前窗口或视口的设置,为了更改单位、方向和缩放,需要调用 
SetWindowExt和 SetViewportExt函数 
MM ISOTROPIC  逻辑单位被映射为具有等刻度轴的任意单位。 HP: x铀上的一个单位等于y轴上的一
个单位。 使用 SetWindowExtEx和 SetViewportExtEx函数指定所需的轴的单位和方向。 GDI会根据
需要进行调整,以确保x和y轴的单位大小保持一致  
MM HIENGLlSH  一个逻辑单位被转换为0 ∞l英寸. x轴向右为正, y轴向上为正  
MM lID叫ETRIC 一个逻辑单位被转换为0. 01毫米。 x轴向右为正, y轴向上为正  
MM LOENGLlSH  一个逻辑单位被转换为0.01英寸。 x轴向右为正, y轴向上为正  
MM LOMETRIC  一个逻辑单位被转换为0.1毫米. x轴向右为正, y轴向上为正  
MM TEXT  一个逻辑单位被转换为 l个设备像素。 x轴向右为正, y轴向下为正 
MM TWIPS  一个逻辑单位被转换为 1120磅 (因为 l磅=ln2英寸,所以一个twip是 1/1440英寸). x
轴向 右为正, y轴向上为正  

2.逻辑坐标和设备坐标的相互转换
对于逻辑坐标和设备坐标之间的相互转换,可以利用以下相应公式来完成。窗口(逻辑)坐标转换为
视口(设备〉坐标的两个公式: 
xViewport=(xWindow-xWinOrg)* xViewExt/xWinExt +xViewOrg 
yViewport= (yWindow-yWinOrg)* yViewExt/yWinExt +yViewOrg 

视口(设备〉坐标转换为窗口 (逻辑〉坐标的两个公式: 
xWindow=(xViewPort-xViewOrg)* xWinExt/xViewExt +xWinOrg 
yWindow=(yViewPort-yViewOrg)食 yWinExt/yViewExt +yWinOrg 

在岛岱1 TEXT映射方式下逻辑坐标和设备坐标的相互转换因为在MM TEXT映射方式下,逻辑单位和设
备单位是一样的,而且它们的窗口和视 
. 

. 

第 11

口的范围都是 l x l的,相当于它们的转换因子就是1.因此窗口(逻辑)坐标转换为视口(设备)坐标
的两个公式为 : 
xViewport = xWindow-xWinOrg+xViewOrg 
yViewport = yWindow-yWinOrg+yViewOrg . 
视口(设备)坐标转换为窗口(逻辑)坐标的两个公式为 : 
xWindow = xViewport-xViewOrg+xWinOrg 

yWindow = yViewport-yViewOrg+yWinOrg 

而通过消息,例如鼠标左键单击消息得到的坐标点是以设备坐标为单位,即以像素为单位的值。因
为默认映射模式是 MM_TEXT,所以逻辑单位和设备单位是一样的,因此,在前面章节的程序中我们
没有显式地进行坐标点的转换,而是直接使用得到的设备坐标调用 GDI函数进行了图形的绘制。 
3.视口和窗口原点的改变 
CDC中提供了两个成员函数 : SetViewportOrg和 SetWindowOrg,用来改变视口和窗口的原点。如果
将视口原点设置为 (xViewOrg,y ViewOrg) ,则逻辑点 ( 0, 0)就会被映射为设备点( x ViewOrg,y 
ViewOrg )。如果将窗口原点改变为 ( x WinOrg,yWinOrg ) ,则逻辑点 (xWinOrg,yWinOrg)将会被
映射为设备点 (0, 0),即设备客户区的左上角。注意=不管对窗口和视口原点如何改变,设备点 ( 0,
0 )始终是客户区的左上角。 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -