- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、GDI相关概念
1、GDI(Graphics Device Interface):图形设备接口,是一个应用程序与输出设备之间的中介。它提供了一套函数库,这些函数在不同的输出设备上输出图形和文字。一方面,GDI向应用程序提供一个与设备无关的编程环境,另一方面,它又以设备相关的格式和具体的设备打交道。2、DC (Device Context):设备描述表(设备上下文),是一种Windows数据结构,包括了如线的宽度和颜色、刷子的样式和颜色、字体、剪裁区域等信息。用于表达显示器、打印机等设备。
DC的主要作用是进行绘图和输出文字,如绘制线条、形状和文本等,具体如dc.MoveTo(),dc.LineTo(),dc.Ellipse(),dc.FillRect(),dc.FillSolidRect(),dc.TextOut()等。
Win32下与HDC相关的函数有:GetDC(), BeginPaint()/EndPaint(),GetWindowDC()等
对应的MFC版本的类有:CDC, CPaintDC, CClientDC, CWindowDC等3、GDI对象:DC定义了一组GDI对象,包括画笔,画刷,字体,位图,调色板,剪裁区域,路径层(Path)。他们有Win32和MFC两套实现版本,其对应关系如下:Win32对象 MFC类 HPEN CPen HBRUSH CBrush HFONT CFont HBITMAP CBitmap HPALETTE CPalette HRGN CRgn4、DC与GDI对象之间的关系:GDI对象是通过DC发生作用的,要使用这些GDI对象,可以使用Win32函数SelectObject来将其选入DC中,如::SelectObject(hdc, hPen);5、利用DC和GDI对象绘图的完整步骤为:
(1). 获取或者创建一个DC
(2). 获取或者创建一个GDI对象(Pen, Brush等)
(3). 使用dc.SelectObject函数把GDI对象选入DC
(4). 使用DC进行绘图或文字输出
(5). 恢复DC原来的GDI对象并删除刚新创建的GDI对象,如pen.DeleteObject()
(6). 释放或删除设备描述表DC
其中,(1)和(6),(2)和(4)是成对出现的。二、设备描述表DC
Win32下获取DC的API函数有:
HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint):特定用于WM_PAINT消息
HDC GetDC(HWND hWnd):用于获得hWnd参数所指定窗口的客户区域的HDC。
HDC GetWindowDC(HWND hWnd):返回hWnd参数所指定的窗口的HDC,包括非客户区,如标题栏、菜单、滚动条,以及边框等。hWnd为NULL时,获取整个屏幕的HDC。MFC对上述HDC对象和Win32函数进行了封装,基类为CDC类。CDC类包含了各种Win32 HDC的全部功能。在MFC下,使用CDC的成员函数进行图形绘制和文字输出。
CDC类有两个成员变量:m_hDC,m_hAttribDC,它们都是Windows设备描述表句柄。CDC的成员函数作输出操作时,使用m_Hdc;要获取设备描述表的属性时,使用m_hAttribDC。在创建一个CDC类实例时,缺省的m_hDC等于m_hAttribDC。CDC在封装Win32函数SelectObject(HDC hdc,HGDIOBJECT hgdiobject)时,采用了重载技术,即它针对不同的GDI对象,提供了如下名同而参数不同的成员函数:
SelectObject(CPen *pen)//用于选入笔
SelectObject(CBitmap* pBitmap) //用于选入位图
SelectObject(CRgn *pRgn)//用于选入剪裁区域
SelectObject(CBrush *pBrush)//用于选入刷子
SelectObject(CFont *pFont)//用于选入字体
SelectPalette(CPalette *pPalette,BOOL bForceBackground ) //选入调色板到DC
RealizePalletter()//实现逻辑调色板到物理调色板的映射直接使用CDC的例子是内存设备上下文,例如:
CDC dcMem.CreateCompatibleDC(dc);//创建设备描述表
CDC pbmOld = dcMem.SelectObject(m_bmBall); //更改设备描述表属性
//作一些绘制操作
dcMem.SelectObject(pbmOld);//恢复设备描述表的属性
dcMem.D
您可能关注的文档
最近下载
- 招标考察作业标准及流程.docx VIP
- 专题15 议论文阅读(原卷版)2025年中考语文真题分类汇编(全国通用).docx VIP
- (完整版)三基三严考试题题库(附含答案).docx
- 专题12.28 添加辅助线构造三角形全等的十四种方法(题型梳理与方法分类讲解)(人教版)(学生版) 2024-2025学年八年级数学上册基础知识专项突破讲与练(人教版).docx VIP
- 2024创新十年未来十年-致敬中国生物医药创新奋斗者们.pdf VIP
- 广东省茂名市化州市2024-2025学年高一上学期11月期中生物试题【含答案解析】.docx VIP
- 将军饮马模型-将军饮马的数学模型.pdf VIP
- 高中语文散文阅读知识点思维导图.docx VIP
- 关于成立工程质量管理领导小组的通知.docx VIP
- 高中英语2025届高考高频词汇(共 688个 ).doc VIP
文档评论(0)