GDI 坐标系
Windows坐标系分为逻辑坐标系和设备坐标系两种,GDI支持这两种坐标系。
一般而言,GDI的文本和图形输出函数使用逻辑坐标,而在客户区移动或按下鼠标的鼠标位置是采用设备坐标。
逻辑坐标系 与 设备坐标系:
屏幕坐标系、窗口坐标系与客户区坐标系:
设备坐标系分为屏幕坐标系、窗口坐标系和客户区坐标系三种相互独立的坐标系。
坐标之间的相互转换:
编程时,有时需要根据当前的具体情况进行三种设备坐标之间或与逻辑坐标的相互转换。
映射模式
Windows映像方式的设置方法:
在MFC应用程序中,通过调用CDC类的SetMapMode()函数来设置映像方式。
如:
pDC->SetMapMode(n);
其中,n是在上表中列出的映像方式的识别码。该函数的原型为:
virtual int SetMapMode( int nMapMode );
窗口和视口
窗口和视口的概念:
窗口指的是虚拟存在的一个屏幕,而视口指的是在屏幕上看到的视图客户区域。
在Windows中绘制图形时,并不是把图形直接绘制到屏幕上,而是以各种映像方式下的逻辑坐标系将图形绘制到虚拟的窗口中,然后再将这个窗口中的内容映像到视口中。如果是映像到屏幕上就实现了图形的显示;如果是映像到打印机等输出设备上就实现了图形的打印输出。
因此,窗口原点、视口原点和坐标系中的原点3者的概念是不同的。窗口原点和视口原点指的是同一个点在窗口逻辑坐标和视口设备坐标系的坐标值,它决定了图形由窗口映射到视口时的相对位置。
窗口和视口有关的操作函数
在CWnd类中与窗口和视口有关的操作函数如下:
1. SetWindowOrg函数
SetWindowOrg函数用来设置一个与设备环境有关的窗口原点。
CPoint SetWindowOrg(int x,int y);
CPoint SetWindowOrg(POINT point);
2. SetViewportOrg函数
SetViewportOrg函数用来设置一个与设备环境有关的视口原点。
CPoint SetViewportOrg(int x,int y);
CPoint SetViewportOgr(POINT point);
3. SetWindowExt函数
SetWindowExt函数用来设置与设备环境有关的窗口在x和y方向的幅度。
只有在MM_ISOTROPIC映像方式下该函数才有效。
virtual CSize SetWindowExt(int cx,int cy);
virtual CSize SetWindowExt(SIZE size);
4. SetViewportExt函数
SetViewportExt函数用来设置与设备环境有关的视口在x和y方向的幅度。
只有在MM_ISOTROPIC映像方式下该函数才有效。
virtual CSize SetViewporExt(int cx,int cy);
virtual CSize SetViewporExt(SIZE size);