Windows绘图中的GDI映射模式

  

  对Windows编程新手来说,GDI编程中最困难的部分就是映射模式(Mapping Mode)。

什么是映射模式?

我们知道,GDI画图是在设备描述表这个逻辑意义上的显示平面上进行,其使用的是逻辑坐标,简单地说,映射模式就是设备描述表的属性,用于确定从逻辑坐标到设备坐标值的转换方式。

Windows支持8中映射模式:MM_TEXT为默认。

  

  

  /* Mapping Modes

#define MM_TEXT                   1

#define MM_LOMETRIC           2

#define MM_HIMETRIC            3

#define MM_LOENGLISH          4

#define MM_HIENGLISH           5

#define MM_TWIPS                6

#define MM_ISOTROPIC           7

#define MM_ANISOTROPIC       8

*/

CDC* pDC = GetDC();

// 默认映射模式 MM_TEXT

pDC->Ellipse(0, 0, 100, 100);

// 设置映射模式 MM_LOMETRIC   y向下为负 0.1mm

pDC->SetMapMode(MM_LOMETRIC);

pDC->Ellipse(0, 0, 100, -100);

// 设置映射模式 MM_HIMETRIC   y向下为负 0.01mm

pDC->SetMapMode(MM_HIMETRIC);

pDC->Ellipse(0, 0, 100, -100);

// 设置映射模式 MM_LOENGLISH   y向下为负 0.01in  0.254mm    1英寸(in)=25.4毫米(mm)

pDC->SetMapMode(MM_LOENGLISH);

pDC->Ellipse(0, 0, 100, -100);

// 设置映射模式 MM_HIENGLISH   y向下为负 0.001in 0.0254mm   1英寸(in)=25.4毫米(mm)

pDC->SetMapMode(MM_HIENGLISH);

pDC->Ellipse(0, 0, 100, -100);

// 设置映射模式 MM_TWIPS   y向下为负 0.0007in   1英寸(in)=25.4毫米(mm)

  pDC->SetMapMode(MM_TWIPS);

  pDC->Ellipse(0, 0, 100, -100);

/* 可编程映射模式 */

// 根据窗口尺寸按比例自动调节画图的输出大小

CRect rect;

GetClientRect(&rect);

// 各向异性 MM_ANISOTROPIC

pDC->SetMapMode(MM_ANISOTROPIC);

pDC->SetWindowExt(100, 100);

pDC->SetViewportExt(rect.Width(), rect.Height());

pDC->Ellipse(0, 0, 100, 100);

pDC->SetMapMode(MM_ANISOTROPIC);

pDC->SetWindowExt(100, -100);

pDC->SetViewportExt(rect.Width(), rect.Height());

pDC->Ellipse(0, 0, 100, -100);

//各向同性  MM_ISOTROPIC

pDC->SetMapMode(MM_ISOTROPIC);

pDC->SetWindowExt(100, -100);

pDC->SetViewportExt(rect.Width(), rect.Height());

pDC->Ellipse(0, 0, 100, -100);

pDC->SetMapMode(MM_ISOTROPIC);

pDC->SetWindowExt(100, -100);

pDC->SetViewportExt(rect.Width(), rect.Height());

pDC->Ellipse(0, 0, 100, -100);

  

   CDC::SetWindowExt             设定“窗口范围”

CDC::SetViewportExt           设定“视口范围”

可以这样认为,窗口的尺寸以逻辑单位计算,视口的尺寸以设备尺寸或像素点计算。

需要注意的是,在MM_ISOTROPIC模式下,应该首先调用SetWindowExt,否则部分窗口客户区可能会因落在窗口的逻辑范围之外而无法使用。

时间: 2024-10-13 11:33:17

Windows绘图中的GDI映射模式的相关文章

GDI映射模式

GDI 映射模式 MM_TEXT 1逻辑单位 = 1像素 MM_LOMETRIC 1逻辑单位 = 0.1mm MM_HIMETRIC 1逻辑单位 = 0.01mm MM_LOENGLISH 1逻辑单位 = 0.01 in = 0.254mm MM_HIENGLISH 1逻辑单位 = 0.001 in = 0.0254mm MM_TWIPS 1逻辑单位 = 1/1440 in = 0.0176mm 默认映射模式:MM_TEXT MM_LOMETRIC MM_HIMETRIC MM_LOENGLIS

MFC中的GDI绘图<转>

一.关于GDI的基本概念 什么是GDI? Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上. 在Windows操作系统中,动态链接库C:\WINDOWS\system32\gdi32.dll(GDI Client DLL)中定义了GDI函数,实现与设备无关的包括屏幕上输出像素.在打印机上输出硬拷贝以及绘制Windows用户界面功能.在Visual C++6.0中的头文件C:\Program Files

MFC中的GDI绘图(3)

2.设置坐标映射    (1)Windows坐标系统         Windows坐标系分为逻辑坐标系和设备坐标系两种,GDI支持这两种坐标系.一般而言,GDI的文本和图形输出函数使用逻辑坐标,而在客户区移动或按下鼠标的鼠标位置是采用设备坐标.         <1>逻辑坐标系是面向DC的坐标系,这种坐标不考虑具体的设备类型,在绘图时,Windows会根据当前设置的映射模式将逻辑坐标转换为设备坐标.         <2>设备坐标系是面向物理设备的坐标系,这种坐标以像素或设备所能

GDI绘图中的映射模式CDC::SetMapMode()

原文链接:http://blog.csdn.net/charlessimonyi/article/details/8264572 在GDI绘图前,一般要设置映射模式.映射模式是什么呢?它是逻辑长度单位与实际长度单位的一中转换关系,比如我要画一个长为800单位,宽为600单位的矩形,那么在不同的映射模式下,一个单位可能相当于一个像素,也可能相当于一毫米,也可能相当于一微米.也就是说在有的映射模式下,我们指定的800单位的长度相当于800像素,在有的映射模式下,我们指定的800单位的长度相当于800

MFC中的GDI绘图(1)

一.关于GDI的基本概念 什么是GDI         Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上. 在Windows操作系统中,动态链接库C:\WINDOWS\system32\gdi32.dll(GDI Client DLL)中定义了GDI函数,实现与设备无关的包括屏幕上输出像素.在打印机上输出硬拷贝以及绘制Windows用户界面功能.在Visual C++6.0中的头文件C:\Progra

MFC中的GDI绘图(4)

3.创建绘图工具并选入DC 有了画布,要绘图我们必须有画笔画刷.在Windows中有HPEN.HBRUSH等GDI对象,MFC对GDI对象进行了很好的封装,提供了封装GDI对象的类,如CPen.CBrush.CFont.CBitmap和CPalette等,这些类都是GDI对象类CGdiObject的派生类. 一般先创建画笔(刷),然后调用CDC::SelectObject函数将画笔(刷)选入设备环境最为当前绘图工具,绘图完毕恢复设备环境以前的画笔(刷)对象,最后调用CGdiObject::Del

MFC中的GDI绘图(5)

坐标映射实例 (1)建立单文档MFC项目Draw:New->Projects->MFC AppWizard(EXE)->Single Document. (2)找到CMainFrame::PreCreateWindow函数,在其中设置默认窗口大小为400 pixel*300 pixel. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return

走进windows编程的世界-----位图及映射模式

1   位图的使用 1.1位图介绍 位图-通过保存在图像上每个点的颜色,生成响应的位图文件. 光栅图:图像点阵的保存 矢量图:绘图命令的保存. 1.2位图的使用 1.             加载位图资源 LoadBitap(); 2.             创建防止位图的DC CreateCompatibleDC 3.             将位图放入创建的DC SlectObject 4.             绘制位图到当前DC中 BitBlt 5.             取出位图

Delphi中使用GDI+进行绘图(1)

Delphi的VCL类库中,默认使用的是GDI绘图接口,该接口封装了Win32 GDI接口,能够满足基本的绘图功能,但如果要实现更高级的绘图功能,往往比较困难,GDI+是微软在GDI之后的一个图形接口,功能比GDI丰富很多,在VCL中使用GDI+,能够实现很多高级绘图功能. 目前有多种Delphi对GDI+的封装实现,以下介绍最简单的两种: 1.使用Delphi内置的GDI+接口 首先,创建一个VCL Form应用,窗口文件如下: Pascal Code 12345678910111213141