SetWindowOrg和SetViewportOrg这两个函数比较难搞懂,经过本人的google和实践终于弄明白了这两个函数的本质区别。
1.SetWindowOrg 是把设备坐标的原点移动到逻辑坐标的(X, Y)处
2.SetViewportOrg 是把逻辑坐标的原点移动到设备坐标的(X, Y)处
注意设备坐标和逻辑坐标的区别:
1.设备坐标的X, Y轴方向是固定的,单位也是固定的,X轴向右递增,Y向下递增,单位都是1像素。
2.逻辑坐标的X, Y轴方向不固定,单位也不固定,根据选择的映射模式而变化。
有了以上的解释,相信大家应该能明白为什么下面的代码的现实结果会是这样的了吧。
- void CEx05aView::OnDraw(CDC* pDC)
- {
- pDC->SetMapMode(MM_LOMETRIC);
- pDC->SetWindowOrg(100, 100);
- pDC->Rectangle(0, 0, 200, 200);
- pDC->SetViewportOrg(100, 100);
- pDC->SelectStockObject(GRAY_BRUSH);
- pDC->Rectangle(0, 0, 200, 200);
- }