QQ登录

只需一步,快速开始

搜索
【活动】边做笔记边学习,还能赢取奖学金!
查看: 109|回复: 0

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

[复制链接]
累计签到:72 天
连续签到:48 天
最佳答案
3 
发表于 2017-8-1 13:33:14 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

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. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋手机版Archiver( 粤公网安备 44051102000370号 | 粤ICP备11014136号

© 2010-2017 FishC.com GMT+8, 2017-8-20 04:33 Powered by Discuz! X2.5 Theme by dreambred

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