SetWindowOrg(50,100);设置窗口客户区左上角坐标为(50,100),绘图坐标原点向左上方移动;
SetViewportOrg(50,100);绘图坐标原点向右下方移动。例子1
pDC->SetWindowOrg(50,100);
pDC->MoveTo(0,0); // 实际绘图坐标在窗口坐标(-50,-100);例子2
pDC->SetViewportOrg(50,100);
pDC->MoveTo(0,0); // 实际绘图坐标在窗口坐标(50,100);例子3
pDC->SetWindowOrg(50,100);
pDC->SetViewportOrg(50,100);
pDC->MoveTo(0,0); // 实际绘图坐标在窗口坐标(0,0);例子4
pDC->SetWindowOrg(-50,-100);
pDC->SetViewportOrg(50,100);
pDC->MoveTo(0,0); // 实际绘图坐标在窗口坐标(100,200);
SetViewportOrg(50,100);绘图坐标原点向右下方移动。例子1
pDC->SetWindowOrg(50,100);
pDC->MoveTo(0,0); // 实际绘图坐标在窗口坐标(-50,-100);例子2
pDC->SetViewportOrg(50,100);
pDC->MoveTo(0,0); // 实际绘图坐标在窗口坐标(50,100);例子3
pDC->SetWindowOrg(50,100);
pDC->SetViewportOrg(50,100);
pDC->MoveTo(0,0); // 实际绘图坐标在窗口坐标(0,0);例子4
pDC->SetWindowOrg(-50,-100);
pDC->SetViewportOrg(50,100);
pDC->MoveTo(0,0); // 实际绘图坐标在窗口坐标(100,200);
实际上如果你看过图形学的书就很容易明白了,这种坐标方式与图形学中的定义方式是相同的。
原始的坐标是窗口或视口的左上角被定一为(0,0)点,即原点。水平坐标轴是从原点水平向右指向右上角点为正方向,竖直坐标轴为从原点竖直向下指向左下角点为正方向。如下图:
*————————〉x轴
|(0,0)
|
|
|
\/
y轴
SetWindowOrg(50,100)是设定这里的(0,0)为(50,100),是缺省的原坐标系统进行了坐标变换,是的原坐标原点向上移动了100个象素点,向左移动了50个象素点。
如果 pDC->SetWindowOrg(50,100);
视口的原点在那里?谢谢 qingrun 的讲解图
都不会影响视口的原点。SetViewportOrg用来改变视口原点,
pDC->SetWindowOrg(50,100);后,视口的原点在(-50,-100);(2)//我认为视口原点仍是(0,0),没有SetViewportOrg 视口原点就默认为(0,0)(3)例如: pDC->SetViewportOrg(50,50);
pDC->Rectangle(CRect(-50,-50,150,150));默认pDC->SetWindowOrg(0,0)//代码中没有,但系统默认的。
意思是窗口逻辑坐标系中的一点(0,0),在视口设备坐标系中就是(50,50),
同理 窗 --- - - (50,50), 视 -- - (100,100)。
我认为视口设备坐标系就是窗口客户区的坐标系。您说的 :
例子1: pDC->SetWindowOrg(50,100);
pDC->MoveTo(0,0); // 实际绘图坐标在窗口坐标(-50,-100);
我认为不对。
应理解为: 窗口逻辑中一点(0,0)在视口设备(也就是窗口客户区(我们能看到的))
中为(50,100); pDC用的坐标都是窗口逻辑坐标。
应该是画图在窗口逻辑坐标系中(0,0),显示在视口设备坐标系的(50,100)处。我如果有理解不对的地方, 请您及时答复。
非常感谢
pDC->SetWindowOrg(20,20);
pDC->SetViewportOrg(50,50); pDC->Rectangle(CRect(0,0,100,100));
¦(0,0)
¦
¦
¦
\/
y轴
这是默认映射方式,也可以自已定义的,轴和长度都可以定义。
还有两个函数,
ClientToScreen()
ScreenToClient()
十分有用,尤其在LBUTTONDOWN的时候,
你要真的是初\学者,,强烈建议你DOWN一份我的汉化VC类库帮助,
在dearmite.top263.net
dearmite.myetang.com上面