15. dc.MoveTo(0+100,0+100); dc.LineTo(200+100,0+100);
16. dc.MoveTo(0+100,0+100); dc.LineTo(-200+100,0+100);
17. dc.MoveTo(0+100,0+100); dc.LineTo(0+100,200+100);
18. dc.MoveTo(0+100,0+100); dc.LineTo(0+100,-200+100)
<1>逻辑窗口原点映射为视口原点
<2>逻辑窗口宽度和高度映射为视口宽度和高度
<3>当映射方式为MM_ISOTROPIC时,WindowExt.Width=WindowExt.Height,有效绘图区域为以视口宽高中的最小边为边长的正方形区域。比例因子为:
scaleX=scaleY=min{ViewportExt.Width, ViewportExt.Height }/WindowExt.Width
当映射方式为MM_ANISOTROPIC时,有效绘图区域为整个视口(这里为客户区)。比例因子为: scaleX=ViewportExt.Width/WindowExt.Width
scaleY=ViewportExt.Height /WindowExt.Height。见图4.
<4>设备(视口)坐标 = (逻辑坐标–逻辑窗口原点坐标)×比例因子+视口原点坐标
图4
以下分析中客户区大小为ClientRect=(388,200),逻辑窗口原点为WindowOrg=(100,100),基于(3)<4>中修改后的代码。
在上图4左中,nMapMode=MM_ISOTROPIC,椭圆外接矩形左上角逻辑坐标(-100,300)映射为客户区的以Pixel为单位的坐标为:

