在VC下进行GDI编程时,理解映射方式、设备坐标系、逻辑坐标系、设置逻辑坐标原点和设备坐标原点。可以很好的帮助我们顺利的编写程序。
查阅MSDN手册,可以找到很详细的介绍,不过只为英文版本。
其实映射方式定义了将逻辑单位转换为设备单位的度量单位,并定义了逻辑坐标系的X、Y轴的方向。 所以,映射方式不仅影响逻辑单位的尺寸,也影响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;每个逻辑单位转换为打印点的1/20(即1/1400英寸),X正方向向右,Y方向向上。 MM_ISOTROPIC:逻辑单位转换成具有均等比例轴的任意单位, 即沿X轴的一个单位等于沿Y轴的一个单位,用和函数可以指定该轴的单位和方向。 图形设备界面(GDI)需要进行调整,以保证X和Y的单位保持相同大小(当设置窗口范围时,视口将被调整以达到单位大小相同), X正方向向右,Y正方向向上。 MM_ANISOTROPIC:逻辑单位转换成具有任意比例轴的任意单位(用SetWindowExtEx和SetViewportExtEx函数可指定单位、方向和比例), X正方向向右,Y正方向向上。
上位机MFC如何进行坐标映射
设备坐标系的X、Y轴方向固定,单位固定,X轴向右,Y向下递增。 设备点(0,0)始终是客户区、窗口区或者屏幕区的左上角(如上图所示)。 映射方式仅针对逻辑坐标系。 逻辑坐标系: 所有GDI绘图操作时,坐标都指逻辑坐标系。 当映射方式为MM_TEXT时(也是默认的映射方式),逻辑坐标系与设备坐标系相同。 我们可以使用其他映射方式来试验。 比如: pDC->SetMapMode( MM_LOMETRIC ); //此时Y轴向上为正,X轴向右为正 pDC->SelectStockObject( GRAY_BRUSH ); pDC->Rectangle(100,-100,400,-400); //此时的坐标都是逻辑坐标哦 结果如下图:
函数CDC::SetWindowOrg与CDC::SetViewPortOrg的理解函数CDC::SetWindowOrg是改变窗口(逻辑坐标)原点, 如SetWindowOrg(100,100)则是将逻辑点(100,100)映射到为设备点(0,0); 函数CDC::SetViewPortOrg是改变视口(设置坐标)原点, 如SetViewPortOrg(100,100)则是将设备点(100,100),映射到为逻辑点(0,0)(注意:设备点(100,100)不要等同于逻辑点的(100,100)); 举两个例子: 运用CDC::SetWindowOrg举例如下: pDC->SetMapMode( MM_LOMETRIC ); //此时Y轴向上为正,X轴向右为正 pDC->SelectStockObject( DKGRAY_BRUSH ); pDC->SetWindowOrg(100,100); ////将逻辑点(100,100)映射到设备点(0,0)上 pDC->Rectangle(100,-100,400,-400); //此时的坐标都是逻辑坐标哦
运用CDC::SetViewPortOrg举例如下: pDC->SetMapMode( MM_LOMETRIC ); //此时Y轴向上为正,X轴向右为正 pDC->SelectStockObject( DKGRAY_BRUSH ); pDC->SetViewportOrg( 100, 100 ); //将设备点(100,100)映射到逻辑点(0,0)上 pDC->Rectangle(100,-100,400,-400); //此时的坐标都是逻辑坐标哦
可以下载例程,修改OnDraw函数内的代码,测试效果。
上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例 经历1年的编程与录制点击进入查看
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|