windows系统编程---第4章

上传人:aa****6 文档编号:54834686 上传时间:2018-09-20 格式:PPT 页数:91 大小:358.50KB
返回 下载 相关 举报
windows系统编程---第4章_第1页
第1页 / 共91页
windows系统编程---第4章_第2页
第2页 / 共91页
windows系统编程---第4章_第3页
第3页 / 共91页
windows系统编程---第4章_第4页
第4页 / 共91页
windows系统编程---第4章_第5页
第5页 / 共91页
点击查看更多>>
资源描述

《windows系统编程---第4章》由会员分享,可在线阅读,更多相关《windows系统编程---第4章(91页珍藏版)》请在金锄头文库上搜索。

1、,Windows系统编程实用教程,授课教师: 职务:,第4章 GDI编程,课程描述GDI(Graphics Device Interface,图形设备接口)是Windows操作系统的核心组件和应用程序开发接口。使用GDI可以在应用程序中输出文字、画各种图形。,本章知识点,4.1 GDI设备环境 4.2 坐标系统与Windows颜色 4.3 在对话框中输出文本 4.4 绘制基本图形,4.1 GDI设备环境,4.1.1 GDI设备环境的概念和设备环境句柄 4.1.2 CDC类和CpaintDC类 4.1.3 WM_PAINT消息,4.1.1 GDI设备环境的概念和设备环境句柄,当程序开始画图时,必

2、须首先获得设备环境的句柄,Windows会自动使用默认的属性值填充设备环境结构体。HDC是表示设备环境句柄数据类型,它在WinDef.h中定义,代码如下:typedef HANDLE HDC;,获得HDC句柄的两种方法,1调用BeginPaint()函数2调用GetDC()函数,1调用BeginPaint()函数,BeginPaint()函数的功能是为Windows准备绘图,函数原型如下:HDC BeginPaint(HWND hwnd,LPPAINTSTRUCT lpPaint ) throw();参数说明如下: hwnd,指定要绘图的窗口句柄。 lpPaint,指定绘图的信息。,PAINT

3、STRUCT结构体的定义,typedef struct tagPAINTSTRUCT HDC hdc; /用于绘图的设备环境句柄BOOL fErase; /指定是否才擦除背景。如果为非0值,则出现将擦除背景;否则不擦除。RECT rcPaint; /指定绘图法人矩形区域。BOOL fRestore; /保留,系统内部使用。BOOL fIncUpdate; /保留,系统内部使用。BYTE rgbReserved32;/ 保留,系统内部使用。 PAINTSTRUCT, *PPAINTSTRUCT;,EndPaint()函数,绘图结束后,需要调用EndPaint()函数结束绘图,函数原型如下:voi

4、d EndPaint(HWND hwnd,LPPAINTSTRUCT lpPaint ) throw();,2调用GetDC()函数,GetDC()函数的功能是获取指定窗口的客户区域或整个屏幕的显示设备环境句柄。函数原型如下:HDC GetDC(HWND hWnd);参数hwnd指定要绘图的窗口句柄。函数的返回值是绘图所用的设备环境的句柄。 绘图结束后,需要调用ReleaseDC()函数释放设备环境句柄,函数原型如下:int ReleaseDC(HWND hWnd, HDC hdc);,GetDC()函数的实例,HDC hdc; hdc = :GetDC(hwnd); /下面可以使用hdc进行

5、绘图了 :ReleaseDC(hwnd, NULL);,4.1.2 CDC类和CpaintDC类,CDC类实际上是对HDC的封装,可以通过CDC:m_hDC属性获取被封装的HDC变量。 CDC类提供一些与设备环境有关的函数,例如,可以设置颜色、设指字体、画各种图形、输出文字等。 在实际应用时通常不直接使用CDC类,而是使用它的派生类CPaintDC。类CPaintDC的声明代码如下:class CPaintDC : public CDC,4.1.3 WM_PAINT消息,WM_PAINT是Windows的重要消息。通常,应用程序对WM_PAINT消息的响应是在窗口中绘图或输出文字。当窗口中客户

6、区的内容改变时,系统向窗口过程发送该消息。包括以下情形: 新建窗口时; 窗口的大小改变时; 最大化、最小化窗口或恢复显示窗口时; 移动窗口以致窗口相互重叠时; 客户区是窗口中可以绘图和摆放控件的区域。绘图操作只能在客户区中进行。通常可以理解为窗口中除了标题栏、菜单、边框和状态栏以外的区域。,WM_PAINT消息的处理函数,WM_PAINT消息的处理函数为OnPaint(),默认的OnPaint()函数代码如下: void CtestDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / 用于绘制的设备上下文else/ 用户的绘图语句可以添加在这。CDi

7、alog:OnPaint(); ,4.2 坐标系统与Windows颜色,4.2.1 坐标映射模式 4.2.2 Windows颜色的表示方法 4.2.3 Color类,4.2.1 坐标映射模式,坐标系统是描述位置的一组数值,可以使用坐标轴和度量单位来描述坐标系统。Windows使用二维坐标系统,即有X轴和Y轴两个坐标轴。默认情况下,坐标轴原点位于窗口客户区的左上角,X轴向右为正,Y轴向下为正。度量单位为象素。,CDC:SetMapMode()函数,调用CDC:SetMapMode()函数可以设置坐标映射方式,函数原型如下:int SetMapMode(HDC hdc, / 设备环境句柄int f

8、nMapMode / 新的映射方式 ); 。,参数fnMapMode的取值,1. SetWindowExt()函数,调用CDC:SetWindowExt()函数可以设置与设备环境相关联的窗口的高度和宽度(实际上就是设置坐标系统的逻辑单位)。CDC:SetWindowExt()函数的原型如下:virtual CSize SetWindowExt(int cx,/新的宽度int cy /新的高度 );也可以是CSize SetWindowExt(SIZE size /新的宽度和高度 );,2. SetViewportExt()函数,调用CDC:SetViewportExt()函数可以设置设备环境的

9、视区大小。所谓视区(viewport)就是定义GDI如何将逻辑坐标系统中的点映射到真实设备的坐标系统中的点,也就是将逻辑坐标转换为设备坐标。 CDC:SetViewportExt ()函数的原型如下:virtual CSize SetViewportExt(int cx, /新的宽度int cy /新的高度 );也可以是CSize SetViewportExt(SIZE size /新的宽度和高度 );,3. SetWindowOrg()函数,调用CDC: SetWindowOrg()函数可以设置设备环境的原点。CDC:SetWindowOrg()函数的原型如下:CPoint SetWindo

10、wOrg(int x,/ 新原点的x坐标int y /新原点的y坐标 );也可以是CPoint SetWindowOrg(POINT point / 新原点的坐标 );,4. SetViewportOrg()函数,调用CDC: SetViewportOrg()函数可以设置设备环境的视区原点。CDC: SetViewportOrg()函数的原型如下:virtual CPoint SetViewportOrg(int x, /新的宽度int y /新的高度 );也可以是CPoint SetViewportOrg(POINT point / 新原点的坐标 );返回值为窗口原来的原点坐标。,4.2.2

11、 Windows颜色的表示方法,Windows使用红、绿、蓝3原色组合表示一个颜色,每个原色使用为8位数字表示,和在一起即使用24位数字来表示一个颜色,也就是通常所说的24位色,如图4.2所示。,数据类型COLORREF,Windows使用数据类型COLORREF表示颜色,它实际上就是DWORD。COLORREF的定义代码如下:typedef DWORD COLORREF;DWORD表示一个32位整数,但COLORREF只适用其中的低24位。07位表示红色,815位表示绿色,1623位表示蓝色,2431位始终为0。,宏RGB(r, g, b),可见COLORREF可以表示224种颜色。这么多颜

12、色分别对应那个数字,这无疑会给程序员造成困惑。于是Windows定义了宏RGB(r, g, b),使用红、绿、蓝3原色的方式表示COLORREF数据类型,这更接近人对颜色的认知。 宏RGB在WinGDI.h中定义,定义代码如下:#define RGB(r,g,b) (COLORREF) (BYTE)(r)| (WORD)(BYTE)(g)8) |(DWORD)(BYTE)(b)16)宏RGB中r、g、b分别被转换成3个BYTE型的数据,g被左移8位,b被左移16位,就得到了对应的COLORREF值。,常用颜色的RGB表示,4.2.3 Color类,一个Color对象保存一个表示颜色的32位数,

13、与COLORREF类型不同的是,Color类使用了全部32位数字,而COLORREF类型只使用了低24位数字。Color类中的颜色值包括4个部分,每个部分由8位数字组成。高8位部分是alpha,接下来8位是红色部分,接下来8位是绿色部分,最低8位是蓝色部分,如图4.3所示。32位数值保存在ARGB类型的变量中。 alpha部分用于指定颜色的透明度,取值范围为0255。0表示颜色是透明的,255表示颜色是完全不透明的,1254的取值表示着色或渲染时,颜色与背景色混合的程度。,1构造函数,Color(BYTE a, / 指定Color对象的alpha部分BYTE r, / 指定Color对象的红色

14、部分BYTE g, / 指定Color对象的绿色部分BYTE b / 指定Color对象的蓝色部分 );Color(VOID);Color(BYTE r, / 指定Color对象的红色部分BYTE g, / 指定Color对象的绿色部分BYTE b / 指定Color对象的蓝色部分 );Color(ARGB argb);,2成员函数,4.3 在对话框中输出文本,4.3.1 TextOut()函数 4.3.2 设置输出字体 4.3.3 选择字体的对话框 4.3.4 设置字体的颜色 4.3.5 选择颜色的对话框,4.3.1 TextOut()函数,TextOut()函数可以使用指定的字体、指定的颜

15、色、在指定的位置输出一个字符串,函数原型如下:BOOL TextOut(HDC hdc, / 设备环境的句柄int nXStart, / 输出位置的x坐标int nYStart, / 输出位置的y坐标LPCTSTR lpString, / 输出的字符串int cbString / 指定输出的字符串中字符的数量 );如果成功输出字符串,则函数返回非0值,否则返回0。,CDC类的TextOut()函数,virtual BOOL TextOut(int x, /输出位置的x坐标int y, /输出位置的y坐标LPCTSTR lpszString, / 输出的字符串int nCount );也可以是

16、BOOL TextOut(int x, /输出位置的x坐标int y, /输出位置的y坐标const CString同样,如果成功输出字符串,则函数返回非0值,否则返回0。,【例4.1】,在对话框中使用CDC: TextOut()函数输出“您好!”。 创建一个基于对话框的项目TextOut,默认的对话框为IDD_TEXTOUT_DIALOG,对应的类为CTextOutDlg。这里在WM_PAINT消息的处理函数OnPaint()中使用CDC: TextOut()函数输出字符串。代码如下:void CTextOutDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / 用于绘制的设备上下文elseCPaintDC dc(this); / 用于绘制的设备上下文/ 在(10, 10)处输出字符串dc.TextOutA(10,10, “你好!“, strlen(“你好!“);CDialog:OnPaint(); ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号