SetWindowExtEx()与SetViewportExtEx()

来源:互联网 发布:卷皮和淘宝哪个更好 编辑:程序博客网 时间:2024/05/22 17:20

在映射模式为
MM_ANISOTROPIC //即各向异性,在这种坐标方式下,X轴和Y轴的逻辑单位可以进行任意的缩放
MM_ISOTROPIC // 即各向同性,在这种坐标方式下,X轴和Y轴的逻辑单位比例为1:1
时,需要由SetWindowExtExSetViewportExtEx函数来确定。

SetWindowExtEx函数对应逻辑坐标系(窗口),
SetViewportExtEx函数对应设备坐标系(视口)。

当映射模式为MM_ISOTROPIC时,
如果SetWindowExtExSetViewportExtEx函数的参数并不是按比例设置的,但其显示仍然是保持1:1的比例。
如:

(1)        SetMapMode(hdc, MM_ISOTROPIC);                      SetWindowExtEx(hdc,400,*300*, NULL);                    SetViewportExtEx(hdc,600,450, NULL);   (2)      SetMapMode(hdc, MM_ISOTROPIC);                         SetWindowExtEx(hdc,400,*100*, NULL);                      SetViewportExtEx(hdc,600,450, NULL);     

这俩种情况下,显示的图形比例是相同的。
均如下图:
这里写图片描述
此时,哪个参数才起到决定性的作用呢?函数SetWindowExtEx中的参数是由按照比例较的数值显示图形,

若SetWindowExtEx(hdc,400,100,NULL)按照标准设置
则为SetWindowExtEx(hdc,400,300,NULL),
这里写图片描述
而SetWindowExtEx(hdc,400,360,NULL)按照标准设置
则为SetWindowExtEx(hdc,480,360,NULL)。
这里写图片描述
另:

(1)        SetMapMode(hdc, MM_ISOTROPIC);                      SetWindowExtEx(hdc,400,300, NULL);                    SetViewportExtEx(hdc,600,450, NULL);   (2)      SetMapMode(hdc, MM_ISOTROPIC);                         SetWindowExtEx(hdc,400,300, NULL);                      SetViewportExtEx(hdc,600,600, NULL);    

这俩种情况下,显示的图形比例也是相同的。
均如下图:
这里写图片描述
但与函数SetWindowExtEx不同的是SetViewportExtEx中的参数是由按照比例较的数值显示图形,

若SetViewportExtEx(hdc,600,600, NULL)按照标准设置
则为SetViewportExtEx(hdc,600,450, NULL),
这里写图片描述
而SetViewportExtEx(hdc,600,300, NULL)按照标准设置
则为SetViewportExtEx(hdc,400,300, NULL)。
这里写图片描述
这俩个函数中的参数大小与窗口显示有什么关系呢?

SetWindowExtEx()函数,如前所说,用做记录显示的逻辑坐标,即可以理解成在一个逻辑的笛卡尔坐标系中,先把想要显示的图形绘制出来,由这个函数确定的坐标系然后通过SetViewportExtEx()函数将你绘制的图形按照预定的格式映射到窗口中(可以改变其坐标比例,图形大小等)。
因此,如果在SetViewportExtEx()函数中的参数保持不变时,SetWindowExtEx()函数中的参数越大,即你绘制的笛卡尔坐标系越大,而用于显示的设备坐标系不变,此时你想要显示的图形就会被相应的缩小
同理,SetWindowExtEx()函数中的参数保持不变,SetViewportExtEx()函数中的参数越大,即你提供显示的设备坐标系越大,此时你想要显示的图形就会被相应的放大

以上内容均为个人实践理解,如有错误,还望高手指正。

0 0
原创粉丝点击