逻辑坐标(窗口) 设备坐标(视口)

"窗口"依赖于逻辑坐标,可以是像素点、毫米或程序员想要的其他尺度。
"视口"依赖于设备坐标(像素点)

1. Windows都用下面两个公式将窗口坐标转换成视口坐标:

 xViewport=(xWindow-xWinOrg)*(xViewExt/xWinExt)+xViewOrg

 yViewport=(yWindow-yWinOrg)*(yViewExt/yWinExt)+yViewOrg

 2. Windows还能将视口(设备)坐标转换为窗口(逻辑)坐标:

 xWindow=(xViewport-xViewOrg)*(xWinExt/xViewExt)+xWinOrg

 yWindow=(yViewport-yViewOrg)*(yWinExt/yViewExt)+yWinOrg

可以使用Windows提供的两个函数DPtoLP和LPtoDP在设备坐标及逻辑坐标之间互相转换。

3. SetMapMode

Windows定义了表1所列出的8种映射方式。

 上述映射模式中又可分成以下3类:

映 射 方 式 逻 辑 单 位 X 轴 增 加 Y 轴 增 加 毫 米
MM_TEXT 像 素 点 与 设 备 有 关
MM_LOMETRIC 0. 1mm 0.1
MM_HIMETRIC 0. 01mm 0.01
MM_LOENGLISH 0. 254mm 0.254
MM_HIENGLISH 0. 0254mm 0.0254
MM_TWIPS 0.0176mm 0.0176
MM_ISOTROPIC 任 意(x=y) 可 选 可 选 可 设
MM_ANISOTROPIC 任 意(x!=y) 可 选 可 选 可 设

总结: 作图时在逻辑坐标上作图,然后映射到窗口坐标(视口)
常用函数:SetMapMode();设置映射模式 SetWindowExt()设置逻辑坐标范围 SetViewportExt();设置设备坐标范围 SetViewportOrg()设置设备坐标(视口)原点
举例:
 CRect rc;
 GetClientRect(rc);
 int cx = rc.Width();
 int cy = rc.Height();
 pDC->SetMapMode(MM_ISOTROPIC);
 pDC->SetWindowExt(1000, 1000);
 pDC->SetViewportExt(cx, -cy);
 pDC->SetViewportOrg(cx/2, cy/2);
 
 pDC->Ellipse(-500, 500, 500, -500);
 pDC->MoveTo(-500, 0);
 pDC->LineTo(500, 0);
 pDC->MoveTo(0, 500);
 pDC->LineTo(0, -500);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值