|
TOP
|
|
图形基础(六十六)
|
位大於实际单位。在设备上输出的所有东西都将映射为按1/16英寸增量的座标值。当然,这样就不能画两条间隔l/32英寸的水平直线,因为这样将需要小数逻辑座标。
MM_ANISOTROPIC:根据需要放缩图像
在MM_ISOTROPIC映射方式下设定视窗和视埠范围时,Windows会调整范围,以便两条轴上的逻辑单位具有相同的实际尺度。在MM_ANISOTROPIC映射方式下,Windows不对您所设定的值进行调整,这就是说,MM_ANISOTROPIC不需要维持正确的纵横比。
使用MM_ANISOTROPIC的一种方法是对显示区域使用任意座标,就像我们对MM_ISOTROPIC所做的一样。下面的程式码将点(0,0)设定为显示区域的左下角,x轴和y轴都从0到32,767:
SetMapMode (hdc, MM_ANISOTROPIC) ; SetWindowExtEx (hdc, 32767, 32767, NULL) ; SetViewportExtEx (hdc, cxClient, -cyClient, NULL) ; SetViewportOrgEx (hdc, 0, cyClient, NULL) ;
在MM_ISOTROPIC方式下,相似的程式码导致显示区域的一部分在轴的范围之外。但是对於MM_ANISOTROPIC,不论其尺度多大,显示区域的右上角总是(32767,
32767)。如果显示区域不是正方形的,则逻辑x和y的单位具有不同的实际尺度。
前一节在MM_ISOTROPIC映射方式下,我们讨论了在显示区域中画一个类似时钟的图像,x和y轴的范围都是从-1000到+1000。对於MM_ANISOTROPIC,也可以写出类似的程式:
SetMapMode (hdc, MM_ANISOTROPIC) ; SetWindowExtEx (hdc, 1000, 1000, NULL) ; SetViewportExtEx (hdc, cxClient / 2, -cyClient / 2, NULL) ; SetViewportOrgEx (hdc, cxClient / 2, cyClient / 2, NULL) ;
与MM_ANISOTROPIC方式不同的是,这个时钟一般是椭圆形的,而不是圆形的。
另一种使用MM_ANISOTROPIC的方法是将x和y轴的单位固定,但其值不相等。例如,如果有一个只显示文字的程式,您可能想根据单个字元的高度 |
|