总结:
保持X轴正向向右不变,当Y轴正向向下时
dc.SetViewportOrg(x, y);与dc.SetWindowOrg(-x, -y);等价
当Y轴正向向上时
dc.SetViewportOrg(x, y);与dc.SetWindowOrg(-x, y);等价
需要强调一点,设备原点永远不会移动,保持在(0,0),设备的坐标系永远不会变,变的是逻辑原点在设备坐标系中的位置和逻辑坐标轴的方向。
核心代码:
CRect rectClient;
GetClientRect(rectClient);
pDC->SetViewportExt(rectClient.right,rectClient.bottom); //物理设备
pDC->SetViewportOrg(0,0); //设置窗口左下角为原点坐标
pDC->Ellipse(0,0,900,900);
这段代码很重要,基本上涵盖了设备坐标转换的核心:它的通俗意思为:
以任意比例方式,将逻辑的CRect(0,0,900,900)映射到设备的rectClient上面,并且设置设置窗口左下角为原点坐标
进行画图。