Win32(视口和窗口、坐标映射、自定义映射)

本文介绍了Win32编程中的视口和窗口概念,以及它们的坐标映射。通过SetMapMode()函数可以改变映射模式,以适应不同场景需求。SetViewportOrgEx()和SetWindowOrgEx()用于定义视口原点,SetWindowExtEx()和SetViewportExtEx()则用于自定义坐标刻度和方向。文章还探讨了MM_ISOTROPIC和MM_ANISOTROPIC两种映射模式的区别,前者确保在坐标变换后形状保持不变,后者不作此保证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是视口和窗口

首先需要明白的什么是视口和窗口,其实很简单,窗口自己有一个坐标体系,我们称为逻辑坐标,我们在编程输入坐标的时候,对应的都是逻辑坐标,而视口对应的是设备坐标,单位是屏幕的像素。
显示器显示内容时会把我们输入的逻辑坐标转换为设备坐标,为什么要这么麻烦呢?答:为了自己定义一个合适的坐标轴,具体往下看。
那就要提到映射模式了,在Win32中我们可以使用SetMapMode()函数来修改二者的映射模式,具体可以看以下链接:
https://fishc.com.cn/forum.php?mod=viewthread&tid=64573&extra=page%3D4%26filter%3Dtypeid%26typeid%3D420

映射模式是用来干嘛的

映射模式是用来干嘛的呢,我们知道,win32中的设备坐标默认情况下,无论那种坐标,原点都是在左上角,x轴向右为正,y轴向下为正,这在很多时候是不方便的,我们需要可以自己定义一个坐标,想想我们在纸上作图的时候,会借助于坐标轴,而为了方便,我们常常会在特定的地方画一个坐标轴,并且,我们可以自己标刻度大小,而在win32里面,整个客户区,可以将其看作一张白纸(客户区坐标称为窗口坐标,这个坐标一直不会改变,且原点一直在左上角),我们想要在这张纸的某一个点绘制一个坐标轴的时候,只需要使用SetViewportOrgEx()函数,指定要显示的视口坐标原点在客户区中的位置即可,需要注意的是视口原点和窗口原点是重合的,所以我们同样可以使用SetWindowOrgEx()函数来修改显示的坐标来达到同样的效果。

以上,我们知道了怎么在客户区的任意位置画一个坐标轴,但是我们只确定了原点的位置,这个坐标轴的横纵坐标的方向以及刻度(每一单位对应多少像素)我们还没有进行设定呢,win32本身以及给了我们一些固定的设定,也就是我们刚提到的映射模式,在映射模式中,我们规定了横纵坐标的方向,(比如MM_LOMETRIC模式,表示了每个逻辑单位映射为 0.1 毫米,x 轴向右,y 轴向上,简单来说,我们编程设计坐标时,设定在10,10位置上显示一个点,根据这个映射模式来说,会在我们设定的原点的右上方横向和纵向距离位0.1*10mm位置处出现一个点),定义好映射模式之后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值