1 第8章 GDI编程1-绘图 详细介绍了GDI 绘图,希望对你有帮助: GDI(Graphics Device Interface,图形设备接口)是Window s 操作系统的传统图形子系统,负责与设备无关的图形绘制,Win32 API 为应用程序提供了丰富的绘图函数和功能,MFC 对它们进行了C++类封装,参见图8-1。 Window s 应用程序 MFC Win32 API 执行程序 用户界面(User) GDI+ 图形子系统(GDI) 设备驱动程序 内核(Kernel) 图形驱动程序 硬件抽象层(HAL) 计算机硬件 图8-1 GDI 与Window s 操作系统(其中彩色部分为操作系统) 传统GDI 是随Window s 1.0 于1985 年11 月推出的,新式GDI+则是随Window s XP 于2001 年10 月推出的GDI 的改进版,增加了α 混色、渐变画刷、样条曲线、矩阵变换、图像处理、持久路径等新功能。随Window s Vista 及.NET 框架 3.0 微软于2006 年11 月又推出了基于DirectX 和.NET 框架的全新图形子系统WPF(Window s Presentation Foundation,视窗显示/展现基础),它统一了桌面和浏览器等客户端应用程序的图形界面,采用XAML 声明式编程,将用户界面的设计和编程彻底分离开来,是Window s 的下一代 GUI 显示系统。 本书从第 8 章到第 11 章,将详细讨论如何使用GDI 进行传统的Window s 图形编程,包括绘图、文字、图像、动画、图标、图元文件和打印等内容。GDI+是建立在 GDI 之上的,计划在第 14 和15 章中作简单介绍。WPF 则是以.NET 框架为基础的,准备在第 19 上和20章中再加以讨论。 在 MFC 应用程序中,绘图一般在视图类的(屏幕/打印机)绘图消息响应函数OnDraw中进行,例如: void CDrawView::OnDraw(CDC* /*pDC*/) { CDrawDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; 2 // TODO: 在此处为本机数据添加绘制代码 } 每次需要重绘窗口时(如程序启动、窗口大小改变、全部或部分窗口重现、程序员调用函数RedrawWindow 或 Invalidate/UpdateWindow),应用程序框架都会调用此CWnd 消息响应成员函数(的覆盖)来绘制窗口客户区。 在Windows 中,绘图一般在框架窗口的客户区(对应于视图类 C*View)进行,使用的是封装在MFC 的设备上下文(Device-Context,DC)类 CDC 中的各种绘图函数。 在绘图前,一般需先得到客户区大小和 CDC 对象、设置绘图颜色,然后再根据文档数据或用户操作来绘制各种图形。 8...