SetViewportOrg与SetWindowOrg
在使用dc绘图的过程中有这么两个蛮纠结的函数。
SetViewportOrg是修改设备坐标系的原点位置
SetWindowOrg是修改逻辑坐标系的原点位置
而绘图的时候,经过了以下三个过程
(1)逻辑坐标值减去逻辑坐标原点(setWindowOrg中设置的值)
(2)上面的结果乘以比例因子变为设备坐标值
(3)上面结果加上设备坐标原点值(setViewportOrg中设置的值)然后在设备上显示。
CPaintDC dc(this); // 用于绘制的设备上下文
dc.MoveTo(0,0);
dc.LineTo(100,100); //(0,0)->(100,100)的线段
dc.SetWindowOrg(100,100);
dc.MoveTo(100,100);
dc.LineTo(200,200); //(0,0)->(100,100)的线段
dc.SetWindowOrg(0,0);
dc.MoveTo(100,100);
dc.LineTo(200,200); //(100,100)->(200,200)的线段
dc.SetWindowOrg(0,0);
dc.SetViewportOrg(100,100);
dc.MoveTo(100,100);
dc.LineTo(200,200); //(200,200)->(300,300)的线段
CDialog::OnPaint();