《Windows SDK》028 自定义的映射模式
一 核心知识点* 视口与窗口转换公式
令 X == 视口下的x坐标,Y == 视口下的y坐标, X0 == 视口下的原点x坐标, Y0 == 视口下的原点y坐标
x == 视口下的x坐标,y == 视口下的y坐标, x0 == 视口下的原点x坐标, y0 == 视口下的原点y坐标
那么有:
X == (x - x0) × 映射水平比例 + X0
Y == (y - y0) × 映射垂直比例 + Y0
例如,当映射模式为MM_TEXT时,映射水平比例 == 映射垂直比例 == 1
再例如,当映射模式为MM_LOMETRIC时, 映射水平比例 == 映射垂直比例 = 0.1mm对应的像素个数
* 两种自定义灵活的映射模式 MM_ISOTROPIC 和 MM_ANISOTROPIC
MM_ISOTROPIC 为各向同性,表示对两个坐标轴xy进行同比例的缩放,从而保证xy方向的逻辑单位对应的设备尺寸一致
MM_ISOTROPIC 为各向异性,表示对两个坐标轴xy进行不同比例的缩放,从而让xy方向的逻辑单位可以分别对应的不同的设备尺寸
可以通过两个API函数来设置这两种映射模式下的xy轴缩放比例,其一般调用方式是
先调用 SetWindowExtEx 函数确定窗口的显示范围
再调用 SetViewportExtEx 函数来指定上述范围在客户区所占的比例
然后是绘图操作,绘图函数中的参数范围不可超越上述换算出来的整个客户区的尺寸
二 新API函数
* SetWindowExtEx(hdc, 100, 100, NULL)
该函数用于设置指定设备环境的窗口范围
第一个参数:指定的环境句柄
第二三个参数: 指定窗口的xy方向范围,逻辑单位
第四个参数:POINT结构指针,存放原先的窗口范围
* SetViewportExtEx(hdc, cxClient / 2, cyClient / 2, NULL)
该函数用于设置指定设备环境的视口范围
各参数含义同 SetWindowExtEx
一般配合 SetWindowExtEx 使用,并且其调用位置应在 SetWindowExtEx 之后
页:
[1]