看到GDI映射模式时让我疑惑了好久:视口到底指什么?窗口又指什么?
逻辑坐标系?视口坐标系?设备坐标系?
视口原点?设备点(0,0)?
逻辑原点?逻辑坐标(0,0)?
其实GDI中只有两个坐标系:设备坐标系和逻辑坐标系。
设备坐标系根据获得的dc不同分为:屏幕、全窗口和客户区
逻辑坐标系一般使用在GDI绘图函数中的。
注意:窗口原点总是映射到视口原点。
无论窗口原点还是视口原点均不一定为(0,0)。
其实,视口原点并无实际意义,也只是为了定义逻辑坐标系的位置而已。
视口与设备(通常是客户区)对应
默认映射模式(MM_TEXT)下,窗口原点与视口原点均为(0,0)
SetViewportOrgEx(),设定视口原点,参数中的坐标(是设备坐标,以像素为单位)表示了逻辑点(0,0)将要映射到的设备点。因为,默认窗口原点为(0,0)(也就是逻辑点(0,0)),而窗口原点总是要映射到视口原点的。
同理,
SetWindowOrgEx(),设定窗口原点,参数中的坐标(是逻辑坐标,以逻辑单位)表示了将映射到设备点(0,0)的逻辑点。
调用这两个函数的效果均是改变了逻辑坐标系的位置,其中任何一个均可以达到相同的目的。只不过在使用SetWindowOrgEx()时可能会用到DPtoLP()将设备坐标
转换为逻辑坐标。