映射模式:
Visual C++ 中采用的坐标映射方式使得用户图形坐标和输出设别的像素完全一致。
eg:当屏幕的像素大小为800X600时,每英寸包含屏幕像素为96,打印机则需要几倍的点数才能达到同样的逻辑尺寸
因此可通过转换坐标映射方式,是打印机采用的坐标比例比显示时所采用的坐标比例相应地大若干倍。
映射模式:在屏幕或打印机上绘图时候,可以使用英寸或者毫米代替作为单位(代替像素),往往更加直观。
PS: 设备单位,逻辑单位
设备单位:是传递给绘图函数的X和Y值,他们可以表示英寸和毫米
逻辑单位:X,Y在屏幕上的像像素,或是打印机上的点阵数。
点击鼠标以设备单位返回,如果想知道鼠标点击位图的什么位置,需要将设备单位转化为逻辑单位。
映射模式 | 逻辑单位 |
MM_TEXT | 1px |
MM_LOMETRIC | 0.1mm |
MM_HIMETRIC | 0.01mm |
MM_LOENGLISH | 0.01英寸 |
MM_HIENGLISH | 0.001英寸 |
MM_TWIPS | 1/1440英寸 |
MM_ISOTROPIC | 用户定义的值,但X和Y方向相等(等比) |
MM_ANISOTROPIC | 用户定义的值,但X和Y方向任意 |
映射模式通过设备环境类的一个成员函数SetMapMode()来设置,只要把上述标志当作参数传入函数即可。
设置映射模式后,传给任何绘图函数的坐标值都通过GDI内部的映射机制转换成设备坐标。
PS:MM_TEXT模式时,Y轴的正方向是沿屏幕垂直向下,X轴是沿屏幕向右
其它模式时,Y轴正方向沿屏幕垂直向上,X轴是沿屏幕向后
窗口:以逻辑单位表示绘图区域的大小,屏幕所见尺寸
视口:以设备单位(像素或点阵数)表示设备绘图区域的大小,如:打印机
pDC->SetMapMode(MM_TEXT); pDC->SetViewportOrg(50,50); pDC->SetWindowOrg(200,200); CPen myPen(PS_SOLID,1,RGB(255,0,0)); CPen* pOldPen=pDC->SelectObject(&myPen); pDC->TextOut(200,180,_T("左上点像素坐标=50,y=50")); pDC->Rectangle(200,200,400,400); pDC->SelectObject(pOldPen); myPen.DeleteObject();
结果如图: