鱼C论坛

 找回密码
 立即注册
查看: 1994|回复: 0

[学习笔记] 《Windows SDK》028 自定义的映射模式

[复制链接]
发表于 2017-8-1 13:33:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一 核心知识点
* 视口与窗口转换公式
令 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鱼币 +3 收起 理由
小甲鱼 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 14:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表