欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > windows >内容正文

windows

Windows GDI和GDI+编程实例剖析(1)

发布时间:2025/3/15 windows 19 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Windows GDI和GDI+编程实例剖析(1) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
Windows GDIGDI+编程实例剖析(1) 作者:宋宝华  e-mail:21cnbao@21cn.com 1.基本概念 GDIWindows中定义为Graphics Device Interface,即图形设备接口,是Windows API(Application Programming Interface)的一个重要组成部分。它是Windows图形显示程序与实际物理设备之间的桥梁,GDI使得用户无需关心具体设备的细节,而只需在一个虚拟的环境(即逻辑设备)中进行操作。它的桥梁作用体现在: 1)用户通过调用GDI函数将逻辑空间的操作转化为具体针对设备驱动程序的调用; 为实现图形设备无关性,Windows 的绘图操作在一个设备描述表上进行。用户拥有自己的“逻辑坐标”系统,它独立于实际的物理设备,与“设备坐标”相对应。开发Windows应用程序时,程序员关心的是逻辑坐标,我们在逻辑坐标系上绘图,利用GDI将逻辑窗口映射到物理设备上。 2GDI能检测具体设备的能力,并依据具体的设备以最优方式驱动这些设备,完成真实的显示。  GDI函数大致可分类为:设备上下文函数(如GetDCCreateDCDeleteDC)、画线函数(如LineToPolylineArc)、填充画图函数(如EllipseFillRectPie)、画图属性函数(如SetBkColorSetBkModeSetTextColor)、文本、字体函数(如TextOutGetFontData)、位图函数(如SetPixelBitBltStretchBlt)、坐标函数(如DPtoLPLPtoDPScreenToClientClientToScreen)、映射函数(如SetMapModeSetWindowExtExSetViewportExtEx)、元文件函数(如PlayMetaFileSetWinMetaFileBits)、区域函数(如FillRgnFrameRgnInvertRgn)、路径函数(如BeginPathEndPathStrokeAndFillPath)、裁剪函数(如SelectClipRgnSelectClipPath)等。  GDI虽然使程序员得到了一定程度的解脱,但是其编程方式仍很麻烦。譬如,显示一张位图,程序员需要进行“装入位图―读取位图文件头信息―启用设备场景―调色板变换”等一连串操作。而有了GDI+,这些问题便迎刃而解了。 顾名思义,GDI+GDI的增强版。它是微软在Windows 2000以后操作系统中提供的新接口,其通过一套部署为托管代码的类来展现,这套类被称为GDI+的“托管类接口”。GDI+主要提供了以下三类服务: (1) 二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构体)、存储图形基元绘制方式信息的类以及实际进行绘制的类; (2) 图像处理:大多数图片都难以划定为直线和曲线的集合,无法使用二维矢量图形方式进行处理。因此,GDI+为我们提供了BitmapImage等类,它们可用于显示、操作和保存BMPJPGGIF等图像格式。 (3) 文字显示:GDI+支持使用各种字体、字号和样式来显示文本。 GDI接口是基于函数的,而GDI+是基于C++类的对象化的应用程序编程接口,因此使用起来比GDI要方便。 2.例程简述 本文后续的讲解都基于这样的一个例子工程(例程的开发环境为Visual C++6.0,操作系统为Windows XP),它是一个基于对话框的MFC应用程序,包括2个父菜单: (1)    GDI GDI父菜单下包括一个子菜单: IDIDM_GDI_DRAW_LINE      caption:画线 单击事件:在窗口绘制正旋曲线 (2)    GDI+ DIB位图父菜单下包括两个子菜单: a. IDIDM_GDIP_DRAW_LINE         caption:画线 单击事件:在窗口绘制正旋曲线 b. caption:新增功能,其下又包括下列子菜单: (ⅰ)IDIDM_Gradient_Brush      caption:渐变画刷 单击事件:在窗口演示GDI+的渐变画刷功能 (ⅱ)IDIDM_Cardinal_Spline     caption:基数样条 单击事件:在窗口演示GDI+的基数样条函数功能 (ⅲ)IDIDM_Transformation_Matrix caption:变形和矩阵对象 单击事件:在窗口演示GDI+的变形和矩阵对象功能 (ⅳ)IDIDM_Scalable_Region   caption:可伸缩区域 单击事件:在窗口演示GDI+的可伸缩区域功能 IDIDM_IMAGE       caption:图像 单击事件:在窗口演示GDI+的多种图像格式支持功能 IDIDM_Alpha_Blend    captionAlpha混合 单击事件:在窗口演示GDI+Alpha混合功能 IDIDM_TEXT caption:文本 单击事件:在窗口演示GDI+的强大文本输出能力 后续篇章将集中在对上述菜单单击事件消息处理函数的讲解,下面的代码是整个对话框类CGdiexampleDlg的消息映射: BEGIN_MESSAGE_MAP(CGdiexampleDlg, CDialog) //{{AFX_MSG_MAP(CGdiexampleDlg)   ON_WM_SYSCOMMAND()   ON_WM_PAINT()   ON_WM_QUERYDRAGICON()   ON_COMMAND(IDM_GDI_DRAW_LINE, OnGdiDrawLine)   ON_COMMAND(IDM_GDIP_DRAW_LINE, OnGdipDrawLine)   ON_COMMAND(IDM_Gradient_Brush, OnGradientBrush)   ON_COMMAND(IDM_Cardinal_Spline, OnCardinalSpline)   ON_COMMAND(IDM_Transformation_Matrix, OnTransformationMatrix)   ON_COMMAND(IDM_Scalable_Region, OnScalableRegion)   ON_COMMAND(IDM_IMAGE, OnImage)   ON_COMMAND(IDM_Alpha_Blend, OnAlphaBlend)   ON_COMMAND(IDM_TEXT, OnText) //}}AFX_MSG_MAP END_MESSAGE_MAP()

总结

以上是生活随笔为你收集整理的Windows GDI和GDI+编程实例剖析(1)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。