使用各种映射方式

2008-02-23 05:28:25来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

所谓的映射方式简单点讲就是坐标的安排方式,系统默认的映射方式为MM_TEXT即X坐标向右增加,Y坐标向下增加,(0,0)在屏幕左上方,DC中的每一点就是屏幕上的一个象素。也许您会认为这种方式下是最好理解的,但是个点和象素对应的关系在屏幕上看来是正常的,但到了打印机上就会很不正常。因为我们作图是以点为单位并且打印机的分辨率远远比显示器高(800DPI 800点每英寸)所以在打印机上图像看起来就会很小。这样就需要为打印另做一套代码而加大了工作量。假如每个点对应0.1毫米那么在屏幕上的图像就会和打印出来的图像相同大小。

通过int CDC::SetMapMode( int nMapMode )能够指定映射方式,可用的有以下几种:

  • MM_HIENGLISH 每点对应0.001英寸 Each logical unit is converted to 0.001 inch. Positive x is to the right; positive y is up.

  • MM_HIMETRIC 每点对应0.001毫米 Each logical unit is converted to 0.01 millimeter. Positive x is to the right; positive y is up.

  • MM_LOENGLISH 每点对应0.01英寸 Each logical unit is converted to 0.01 inch. Positive x is to the right; positive y is up.

  • MM_LOMETRIC 每点对应0.001毫米 Each logical unit is converted to 0.1 millimeter. Positive x is to the right; positive y is up.

  • MM_TEXT 象素对应 Each logical unit is converted to 1 device pixel. Positive x is to the right; positive y is down.

以上几种映射默认的原点在屏幕左上方。除MM_TEXT外都为X坐标向右增加,Y坐标向上增加,和自然坐标是一致的。所以在作图是要注意什么时候应该使用负坐标。而且以上的映射都是X-Y等比例的,即相同的长度在X,Y轴上显示的长度都是相同的。

DownLoad Sample

另外的一种映射方式为MM_ANISOTROPIC,这种方式能够规定不同的长宽比例。在配置这中映射方式后必须调用CSize CDC::SetWindowExt( SIZE size )和CSize CDC::SetViewportExt( SIZE size )来设定长宽比例。系统会根据两次设定的长宽的比值来确定长宽比例。下面给出一段代码比较映射前后的长宽比例:

OnDraw(CDC* pDC)

{

	CRect rcC1(200,0,400,200);

	pDC->FillSolidRect(rcC1,RGB(0,0,255));

	pDC->SetMapMode(MM_ANISOTROPIC );

	CSize sizeO;

	sizeO=pDC->SetWindowExt(5,5);

	TRACE("winExt %d %d\n",sizeO.cx,sizeO.cy);

	sizeO=pDC->SetViewportExt(5,10);

	TRACE("ViewExt %d %d\n",sizeO.cx,sizeO.cy);

	CRect rcC(0,0,200,200);

	pDC->FillSolidRect(rcC,RGB(0,128,0));

}

上面代码在映射后画出的图像将是个长方形。

DownLoad Sample

最后讲讲视原点(viewport origin),您能够通过调用CPoint CDC::SetViewportOrg( POINT point )重新配置原点的位置,这就相对于对坐标进行了位移。例如您将原点配置在(20,20)那么原来的(0,0)就变成了(-20,-20)。




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C 学习要点

下一篇: 在窗口中绘制设备相关位图,图标,设备无关位图

热门词条
热门标签