GDI是我发现比较麻烦的一个东西了.看了Windows程序设计,虽然描述很清楚,但还让我们难以理解.最让人麻烦的就是窗口和视口的概念了.其实,本质就是设备和显示的关系.把我理解的写在下面!希望指正.
1.设备,设备就是Device,有显示器,打印机,等,这些硬件都是设备.都可以提供图形显示功能,这些就是设备.设备用 像素或者称为点来描述显示能力:比如1024*768像素,打印机用的是DPI,就是每个英寸可以显示的点数.比如针式打印机为180*180,这个纵横比例就说明了打印的能力,180DPI.喷墨,激光打印机可能是1200DPI,6000DPI. 我们在何处显示呢?那要告诉打印机/显示器,在 第几个像素显示,这就涉及到一个坐标问题.设备有一个直角坐标系,在屏幕或者打印机的左上角.为0,0坐标.每个像素(点)为一个单位.
2.窗口.在Windows显示器中,称为窗口,在打印上,就是纸张.实际上就是你看到的东西.我们可以使用设备的单位(点,像素),但我们一更换不同分辨率的打印机,发现打印的大小不同.这就是因为在每个英寸上的点(显示能力,DPI)不同导致.为了帮助我们使用,Windows提供了映射模式.可以让我们以我们现实中的单位(逻辑单位)来定义我们的图形行为(打印或者显示).比如,我喜欢使用毫米.那么我定义映射模式的单位为毫米,这样我的图形行为在任何设备上输出,都保证是毫米的了.到底该用多少像素,GDI帮我们作了.否则我们就要自己进行判断,计算.
3.难以理解的事情是因为概念的原因. 即视口,视口就是设备,窗口就我们可以看到的东西.记住了就是理解!
4.既然有了窗口,我们可以在窗口上进行绘图,输出文字了.这些都是逻辑上的,也就是我们要看到的.我们还要告诉显示设备,让设备知道我们的单位换算关系,位置对应关系. 单位换算关系就是将一毫米转换多少像素的问题.位置对应关系就是坐标怎么对应.Windows可以让你对应多种坐标系.
5.怎么决定换算单位:其实就是一个显示能力的问题.比如显示器,96DPI,每英寸96点.那么 一英寸=25.4毫米,即每毫米3.78个像素.呵呵,当然,Window肯定不能显示半个像素.这样,同样是 25.4毫米,在我们的显示器上就是96点,而在打印机上就是180点.这样换算没有问题了. 可以认为,在使用毫米单位时,在96DPI的能力中,这个换算因子是3.78.
6.怎么决定位置对应关系.首先,假设原点相同.这样位置对应关系就变成单位换算了.呵呵.那么,原点不同,就在加上个偏移量.
7.换算单位可以用范围来指定.这也是个不好理解的地方,比如,在MM_TEXT模式下,1:1,就是说设备和窗口的范围都是1,那么两个单位一致.而在使用毫米单位时呢,显示器就是 254:96, 打印机可能是254:180,当然,还可以为实际的范围比例.
即使用 SetWindowExtEx 设定显示范围大小; 用SetViewportExtEx设定设备范围大小.
最后把常用的单位换算写下来:
1 inch 英寸=25.4 millimetres 毫米
1 point 磅 = 1/72 inch英寸
1 twip缇 = 1/20 point 磅
我目前使用的映射模式:
SetMapMode(hdc,MM_ANISOTROPIC);
SetWindowExtEx(254,254);
SetViewportExtEx(GetDeviceCaps(hdc,LOGPIXELSX),GetDeviceCaps(hdc, LOGPIXELSY));
我发现,显示和打印不是特别美.原因是缩放转换中,导致四舍五入的结果.下一步,我打算用一个更大的单位来满足需要.
祝学习愉快!
分享到:
相关推荐
总结一下,`MM_HIMETRIC`映射模式是GDI中一种重要的概念,它允许开发者以毫米为单位进行图形操作,确保在不同分辨率的设备上保持一致的物理尺寸。在实际项目中,尤其是在处理打印或需要精确尺寸控制的图形应用时,...
总结来说,理解并掌握`MM_ISOTROPIC`和`MM_ANISOTROPIC`映射模式以及`SetWindowExt`和`SetViewportExt`函数对于在GDI中创建精确且多样化的图形至关重要。在`MM_ISOTROPIC`模式下,你将获得等比缩放的效果,适合绘制...
总结来说,理解并熟练运用MFC中的映射模式,以及相关的双缓冲、视口扩展和窗口扩展设置,是提升Windows图形界面程序性能和视觉效果的关键。开发者需要根据实际需求选择合适的映射模式,并合理利用SetViewportExt和...
总结来说,VC++中的映射模式是一个强大的工具,能够帮助开发者实现精确的绘图和控件定位。理解并掌握不同映射模式的工作原理以及如何在它们之间转换,是创建高效、精确的GUI程序的关键。通过学习和实践,你将能熟练...
在Windows应用程序开发中,理解和掌握GDI的坐标系统和映射模式对于实现高质量的图形界面至关重要。通过选择合适的映射模式,可以确保图形在不同的设备上都能呈现出期望的效果,从而提高用户体验。
- **设置绘图属性**:包括抗锯齿、文本渲染提示和像素偏移模式等,以提高图像质量。 - **计算比例**:根据数据集计算各个扇形的角度。 - **绘制扇形**:使用`DrawPie`和`FillPie`方法绘制每个扇形。 - **添加标签**...
3. **MM_TEXT**: 默认的映射模式,一个逻辑单位映射成什么由系统确定。 映像模式的选择会影响图形的呈现效果,开发者可以根据需要选择合适的映像模式来满足特定的需求。 ### 总结 Windows GDI提供了一套强大的...
在 GDI 中,可以通过设置不同的映射模式来控制绘图的坐标系统,以及设置窗口和视图单位的大小。 **API 函数:** - `SetMapMode`: 设置映射模式。 - `SetWindowExtEx`: 设置窗口单位的大小。 - `SetViewportExtEx`: ...
总结来说,这个VC仿画图板程序涉及到的知识点包括:GDI的设备上下文、图形对象的创建与选择、图形绘制函数的使用、事件处理和窗口消息映射。通过这个项目,不仅可以掌握GDI编程基础,还能提升对Windows编程的理解。
- **使用颜色重映射表**: 支持颜色重映射表的使用。 #### 打印 - **将 GDI+ 输出至打印机**: 支持将 GDI+ 内容输出到打印机。 - **显示一个打印对话框**: 提供显示打印对话框的功能。 - **通过提供打印机句柄优化...
- **SetMapMode(MM_ANISOTROPIC)**:设置映射模式为各向异性,这样可以更好地处理不同方向上的缩放。 - **SetWindowOrg/SetWindowExt**:设置窗口原点和窗口单位,分别用于指定窗口的原点位置和单位长度。 - **...
映射模式决定了Windows将怎样把GDI函数中指定的逻辑坐标映射为设备坐标。通过设置映射方式,可以设置窗口下的逻辑坐标系的长度单位和坐标的正方向。Windows定义了8种映射模式,包括MM_TEXT、MM_LOENGLISH、MM_...
本文将深入探讨如何使用API画笔和画刷,以及如何利用不同的映射模式来实现图形的放大和缩小。 首先,让我们了解画笔和画刷的基本概念。在Windows图形编程中,画笔(Pen)用于定义线条的颜色、宽度和样式,而画刷...
【映射模式】是GDI中控制坐标系统的机制,它可以改变坐标系统的单位和比例,以适应不同尺寸和分辨率的设备。常见的映射模式有MM_TEXT、MM_LOENGLISH等,它们决定了坐标值如何被解释和转换。 【文本与字体】在GDI中...
总结来说,本章内容涉及了GDI的基本原理和常用操作,包括设备环境、坐标系统、映射模式、画笔和画刷的使用,以及颜色管理、文本输出和图形绘制。通过这些知识点,开发者能够创建出具有复杂图形界面的Windows应用程序...
常见的映射模式有 MM_TEXT、MM_LOMETRIC 和 MM_ANISOTROPIC 等,它们分别对应像素、毫米和自定义比例的坐标系统。通过 SetMapMode 函数可以改变设备环境的映射模式。 总结: 本讲主要介绍了 Windows GDI,它是操作...
为了在不同分辨率的设备上保持一致的视觉效果,Windows提供了多种映射模式,如MM_HIENGLISH、MM_LOENGLISH、MM_HIMETRIC、MM_LOMETRIC、MM_TWIPS等,它们以不同的单位(英寸、毫米或点)定义逻辑坐标。 映射模式MM_...