您的位置:首页 > 其它

SetWindowExtEx()与SetViewportExtEx()

2015-04-26 21:11 711 查看
在映射模式为

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()函数中的参数越大,即你提供显示的设备坐标系越大,此时你想要显示的图形就会被相应的放大

以上内容均为个人实践理解,如有错误,还望高手指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐