没有合适的资源?快使用搜索试试~ 我知道了~
WINDOWS GDI和GDI+编程实例剖析. - READ.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 126 浏览量
2022-07-06
18:10:00
上传
评论
收藏 323KB DOC 举报
温馨提示
试读
29页
WINDOWS GDI和GDI+编程实例剖析. - READ
资源推荐
资源详情
资源评论
Windows GDI 和 GDI+编程实例剖析。 1.基本概念
GDI 在 Windows 中定义为 Graphics Device Interface,即图形设备接
口,是 Windows API(Application Programming Interface)的一个重要组成
部分。它是 Windows 图形显示程序与实际物理设备之间的桥梁,GDI 使
得用户无需关心具体设备的细节,而只需在一个虚拟的环境(即逻辑设备)
中进行操作。它的桥梁作用体现在:
(1)用户通过调用 GDI 函数将逻辑空间的操作转化为具体针对设备驱
动程序的调用。
为实现图形设备无关性,Windows 的绘图操作在一个设备描述表上
进行。用户拥有自己的"逻辑坐标"系统,它独立于实际的物理设备,与"设
备坐标"相对应。开发 Windows 应用程序时,程序员关心的是逻辑坐标,
我们在逻辑坐标系上绘图,利用 GDI 将逻辑窗口映射到物理设备上。
(2)GDI 能检测具体设备的能力,并依据具体的设备以最优方式驱动这
些设备,完成真实的显示。
GDI 函数大致可分类为:设备上下文函数(如 GetDC、CreateDC、
DeleteDC)、 画线函数(如 LineTo、Polyline、Arc)、填充画图函数(如 Ellipse、
FillRect、Pie)、画图属性函数(如 SetBkColor、SetBkMode、
SetTextColor)、文本、字体函数(如 TextOut、GetFontData)、位图函数(如
SetPixel、BitBlt、StretchBlt)、坐标函数(如 DPtoLP、LPtoDP、
ScreenToClient、ClientToScreen)、映射函数(如 SetMapMode、
SetWindowExtEx、SetViewportExtEx)、元文件函数(如 PlayMetaFile、
SetWinMetaFileBits)、区域函数(如 FillRgn、FrameRgn、InvertRgn)、路
径函数(如 BeginPath、EndPath、StrokeAndFillPath)、裁剪函数(如
SelectClipRgn、SelectClipPath)等。
GDI 虽然使程序员得到了一定程度的解脱,但是其编程方式仍很麻烦。
譬如,显示一张位图,程序员需要进行"装入位图―读取位图文件头信息―
启用设备场景―调色板变换"等一连串操作。而有了 GDI+,这些问题便迎
刃而解了。
顾名思义,GDI+是 GDI 的增强版。它是微软在 Windows 2000 以后
操作系统中提供的新接口,其通过一套部署为托管代码的类来展现,这套
类被称为 GDI+的"托管类接口"。GDI+主要提供了以下三类服务:
(1) 二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构
体)、存储图形基元绘制方式信息的类以及实际进行绘制的类;
(2) 图像处理:大多数图片都难以划定为直线和曲线的集合,无法使
用二维矢量图形方式进行处理。因此,GDI+为我们提供了 Bitmap、Image
等类,它们可用于显示、操作和保存 BMP、JPG、GIF 等图像格式。
(3) 文字显示:GDI+支持使用各种字体、字号和样式来显示文本。
GDI 接口是基于函数的,而 GDI+是基于 C++类的对象化的应用程序
编程接口,因此使用起来比 GDI 要方便。
2.例程简述
单击此处下载本文例程源代码。
本文后续的讲解都基于这样的一个例子工程(例程的开发环境为
Visual C++6.0,操作系统为 Windows XP),它是一个基于对话框的 MFC
应用程序,包括 2 个父菜单:
(1) GDI
GDI 父菜单下包括一个子菜单:
ID:IDM_GDI_DRAW_LINE caption:画线
单击事件:在窗口绘制正旋曲线
(2) GDI+
DIB 位图父菜单下包括两个子菜单:
a. ID:IDM_GDIP_DRAW_LINE caption:画线
单击事件:在窗口绘制正旋曲线
b. caption:新增功能,其下又包括下列子菜单:
(ⅰ)ID:IDM_Gradient_Brush caption:渐变画刷
单击事件:在窗口演示 GDI+的渐变画刷功能
(ⅱ)ID:IDM_Cardinal_Spline caption:基数样条
单击事件:在窗口演示 GDI+的基数样条函数功能
(ⅲ)ID:IDM_Transformation_Matrix caption:变形和矩阵对象
单击事件:在窗口演示 GDI+的变形和矩阵对象功能
(ⅳ)ID:IDM_Scalable_Region caption:可伸缩区域
单击事件:在窗口演示 GDI+的可伸缩区域功能
(ⅴ)ID:IDM_IMAGE caption:图像
单击事件:在窗口演示 GDI+的多种图像格式支持功能
(ⅵ)ID:IDM_Alpha_Blend caption:Alpha 混合
单击事件:在窗口演示 GDI+的 Alpha 混合功能
(ⅶ)ID:IDM_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()
3.GDI 编程
"GDI"菜单下的"画线"子菜单单击事件消息处理函数的代码如下:
void CGdiexampleDlg::OnGdiDrawLine()
{
// TODO: Add your command handler code here
剩余28页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 79
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功