映射模式:

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();

  结果如图:

最新文章

  1. IEEE754、VAX、IBM浮点型介绍和.NET中互相转换
  2. 使用VNET-to-VNET连接Microsoft Azure国际版和中国版
  3. 那些年我们赚过的外快(POS(移动支付)接口开发)
  4. C++常量(C++数值常量、字符串常量、符号常量)
  5. (总结)Linux下使用rsync最快速删除海量文件的方法
  6. android在程序中打开另一个程序
  7. HDU 4739 求正方形个数
  8. C# / MSSQL / WinForm / ASP.NET - SQLHelper中返回SqlDataReader数据
  9. [ Swift框架 ] # SwiftyJSON
  10. 关于socket通信bind()返回值错误:10049
  11. Ubantu16.04 redis安装
  12. CH 6201 走廊泼水节题解
  13. eikonal equation - 程函方程
  14. JMeter JMeter远程分布式联机性能测试
  15. Pairs Forming LCM LightOJ - 1236 (算术基本定理)
  16. hashlib模块(二十八)
  17. Python爬虫——小说
  18. SD从零开始21-24
  19. 转:Python操作SQLServer示例
  20. The Bits (思维+找规律)

热门文章

  1. 执行sql update use c#
  2. javaweb之javascript结合(三)
  3. wave文件(*.wav)格式、PCM数据格式, goldwave 可以播放pcm raw audio
  4. A Tour of Go For
  5. 在Linux系统中修改IP地址
  6. hdu 1754 I Hate It (splay tree伸展树)
  7. jenkens构建脚本
  8. PAT 1033. To Fill or Not to Fill (25)
  9. jquery ajax异步加载table的方法
  10. sharepoint 2013 更改搜索server组态