理解映射方式、设备坐标系、逻辑坐标系、设置逻辑坐标原点与设备坐标原点

 在 VC 下进行 GDI 编程,理解映射方式、设备坐标系、逻辑坐标系、设置逻辑坐标原点和设备坐标原点,真的把我折磨的够厉害的,花了很多时间,终于弄明白一些了,在此记录下,以便以后温习。

 

一、关于映射方式
参考的网络文章地址:http://blog.csdn.net/xuyongbeijing2008/article/details/8063801 

映射方式定义了将逻辑单位转换为设备单位的度量单位,并定义了逻辑坐标系XY轴的方向。所以,映射方式不仅影响逻辑单位的尺寸,也影响Y轴的正方向。

GDI的八种映射方式及其意义:

MM_TEXT:每个逻辑单位转换为一个图素,X正方向向右,Y正方向向下。(仅此一种方式是Y向下为正方向的

M_LOMETRIC:每个逻辑单位转换为0.1毫米,X正方向向右,Y正方向向上。

MM_LOENGLISH:每个逻辑单位转换为0.1英寸,X正方向向右,Y正方向向上。

MM_HIENGLISH:每个逻辑单位转换为0.001英寸,X的正方面向右,Y的正方向向上。

MM_HIMETRIC:每个逻辑单位转换为0.01毫米,X正方向向右,Y的正方向向上。

MM_TWIPS;每个逻辑单位转换为打印点的120(即11400英寸),X正方向向右,Y方向向上。

MM_ISOTROPIC:逻辑单位转换成具有均等比例轴的任意单位,即沿X轴的一个单位等于沿Y轴的一个单位,用和函数可以指定该轴的单位和方向。图形设备界面(GDI)需要进行调整,以保证XY的单位保持相同大小(当设置窗口范围时,视口将被调整以达到单位大小相同),X正方向向右,Y正方向向上

MM_ANISOTROPIC:逻辑单位转换成具有任意比例轴的任意单位SetWindowExtExSetViewportExtEx函数可指定单位、方向和比例),X正方向向右,Y正方向向上
 

二、设备(物理)坐标系与逻辑坐标系的理解

设备坐标系有三种:客户区坐标系、窗口坐标系、屏幕坐标系。

 图片

有一点非常重要,设备坐标系的XY轴的方向是固定的,单位也是固定的,X轴向右递增,Y向下递增,设备点(0,0)始终是客户区窗口区或者屏幕区的左上角(也即是出图时候看到的)。映射方式只是针对逻辑坐标系的。

逻辑坐标系:

所有的GDI绘图操作的坐标都是在逻辑坐标系下坐标。当映射方式为MM_TEXT时(也是默认的映射方式),逻辑坐标系与设备坐标系是相同的。下面我们用其他的映射方式来试验一下。比如:

pDC->SetMapMode( MM_LOMETRIC ); //此时Y轴向上为正,X轴向右为正

pDC->SelectStockObject( GRAY_BRUSH );

pDC->Rectangle(100,-100,400,-400);  //此时的坐标都是逻辑坐标哦

结果如下所示:

图片 


三、
函数CDC::SetWindowOrgCDC::SetViewPortOrg的理解

函数CDC::SetWindowOrg是改变窗口(逻辑坐标)原点,如SetWindowOrg(100,100)则是将逻辑点(100100)映射到为设备点(00); 

函数CDC::SetViewPortOrg是改变视口(设置坐标)原点,如SetViewPortOrg(100,100)则是将设备点(100100),映射到为逻辑点(00(注意:设备点(100100)不要等同于逻辑点的(100100)

分别举两个例子:

运用CDC::SetWindowOrg举例如下:

pDC->SetMapMode( MM_LOMETRIC ); //此时Y轴向上为正,X轴向右为正

pDC->SelectStockObject( DKGRAY_BRUSH );

pDC->SetWindowOrg(100,100);  将逻辑点(100100)映射到设备点(00)上

pDC->Rectangle(100,-100,400,-400);  //此时的坐标都是逻辑坐标哦

图片 

运用CDC::SetViewPortOrg举例如下:

pDC->SetMapMode( MM_LOMETRIC ); //此时Y轴向上为正,X轴向右为正

pDC->SelectStockObject( DKGRAY_BRUSH );

pDC->SetViewportOrg( 100, 100 );  //将设备点(100100)映射到逻辑点(00)上

pDC->Rectangle(100,-100,400,-400);  //此时的坐标都是逻辑坐标哦

图片 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值