1、Windows应用程序的相关概念应用程序的相关概念Windows应用程序设计方法应用程序设计方法(1)使用)使用Windows提供的提供的Windows API函数函数 Windows API是是Windows系统和系统和Windows应用程序间的标准程序接口,应用程序可以通过应用程序间的标准程序接口,应用程序可以通过此接口访问系统此接口访问系统(2)使用)使用Microsoft提供的提供的MFC类库类库 MFC类库集成了大量已经预先定义好的类,用类库集成了大量已经预先定义好的类,用户可以根据编程的需要调用相应的类,或根据需户可以根据编程的需要调用相应的类,或根据需要自定义有关的类。要自定义有
2、关的类。Windows应用程序的相关概念应用程序的相关概念nWindows应用程序开发模式值得注意的几个方面:应用程序开发模式值得注意的几个方面:Message Processing The Windows Graphics Device Interface Resource-Based Programming Memory Management Dynamic Link Libraries The Win32 Application Programming InterfaceWindows应用程序的相关概念应用程序的相关概念nWindows应用程序基本结构:应用程序基本结构:开始执行开始执行
3、初始化应用初始化应用初始化和创建初始化和创建应用窗口应用窗口进入消息循环并进入消息循环并从消息队列得到从消息队列得到一个消息一个消息当前消息是当前消息是否否“退出退出”?终止执行终止执行程序是否定义程序是否定义了对此消息的了对此消息的处理处理进行默认处理进行默认处理处理消息处理消息Windows应用程序的相关概念应用程序的相关概念nWindows应用程序以消息为基础,以事件驱动之。应用程序以消息为基础,以事件驱动之。事件驱动程序设计事件驱动程序设计是是围绕着消息围绕着消息的产的产生与处理而展开的。一条消息是关于发生生与处理而展开的。一条消息是关于发生的事件的信息。作为一个的事件的信息。作为一个
4、Windows程序程序员,其工作就是对正开发的应用程序所要员,其工作就是对正开发的应用程序所要发出或要接收的消息进行发出或要接收的消息进行排序和管理排序和管理。Windows应用程序的相关概念应用程序的相关概念nWindows消息的结构消息的结构MSG:typedef struct tagMSG HWND hwnd;UINT message;WPARAM wParam;LPARAM lParam;DWORD time;POINT pt;MSG,*PMSG;Windows应用程序的相关概念应用程序的相关概念nWindows消息的处理:消息的处理:MSG msg /定义一个定义一个MSG类型的变类
5、型的变量量while(GetMessage(&msg,NULL,0,0)/产生一个消息循环,等待消息的到来产生一个消息循环,等待消息的到来 TranslateMessage(&msg);/解译消息解译消息 DispatchMessage(&msg);/将消息传递将消息传递给窗口函数,以便处理相应的消息给窗口函数,以便处理相应的消息Windows应用程序的相关概念应用程序的相关概念nWindows应用程序中的应用程序中的数据类型及常量数据类型及常量 typedefunsigned char BYTEtypedefunsigned short WORDtypedefunsigned long DW
6、ORDtypedeflong LONGtypedefchar *PSTRtypedef char NEAR *NPSTtypedefchar FAR*LPSTRtypedefvoid VOID#denfineWM_QUIT0X0012Windows应用程序的相关概念应用程序的相关概念nWindows应用程序中的应用程序中的数据类型及常量数据类型及常量 类型类型 说明说明CS 窗口类的风格(窗口类的风格(Class Style)IDI 预定义的图标对象的标识符(预定义的图标对象的标识符(IDentity of Icon)IDC 预定义的光标对象的标识符(预定义的光标对象的标识符(IDentity
7、 of Cursor)WS 窗口的风格(窗口的风格(Windows Style)CW 创建窗口(创建窗口(Create Windows)WM 窗口消息(窗口消息(Windows Message)DT 绘制文本(绘制文本(Drawing Text)一些常见常量的前缀意义一些常见常量的前缀意义Windows应用程序的相关概念应用程序的相关概念nWindows应用程序中的应用程序中的数据类型及常量数据类型及常量 在变量名的表示方法方面,在变量名的表示方法方面,Windows推荐使用一种推荐使用一种称为称为“匈牙利表示法匈牙利表示法”的方法。每个变量名用的方法。每个变量名用小写字母小写字母或描述了变量
8、的或描述了变量的数据类型数据类型的字母作为前缀,变量的名字的字母作为前缀,变量的名字紧跟其后,且用紧跟其后,且用大写字母开始的单词大写字母开始的单词(一个或多个单词)(一个或多个单词)表示其含义,这样每个变量都能附加上其数据类型的助表示其含义,这样每个变量都能附加上其数据类型的助记符。例如:记符。例如:WORDwOffset;/w表示表示WORD类型类型 DWORD dwValue;/dw表示表示DWORD类型类型 Windows应用程序的相关概念应用程序的相关概念nWindows应用程序中的应用程序中的数据类型及常量数据类型及常量 类型类型 说明说明b BOOL,布尔类型,布尔类型by BY
9、TE类型类型c char类型类型dw DWORD类型类型l LONG类型类型lp 远(长)指针(远(长)指针(long pointer)n 短整型短整型p 指针指针s 字符串字符串 是是Windows环境下最主要的应用开发系统之一环境下最主要的应用开发系统之一 是是C+语言的集成开发环境语言的集成开发环境 与与Win32紧密相连紧密相连 强大的调试功能为大型复杂软件的开发提供了有效的排错手段强大的调试功能为大型复杂软件的开发提供了有效的排错手段 指软件开发阶段的可视化指软件开发阶段的可视化 利用计算机图形技术和方法利用计算机图形技术和方法3 3 开发环境开发环境开发环境是程序员同开发环境是程序
10、员同VC+的交互界面的交互界面通过通过它,它,可以可以创建工程文件创建工程文件访问资源编辑器访问资源编辑器使用内部调试器使用内部调试器访问程序源代码访问程序源代码File-New-Files(1)VC+的菜单栏的菜单栏-FileFile菜单菜单Visual C+6.0 可以创建的文件类型可以创建的文件类型 文件类型文件类型 说明说明 文件类型文件类型 说明说明 Active Server Page 网页制作网页制作 Binary File 创建二进制文件创建二进制文件 Bitmap File 创建位图文件创建位图文件 C+Source File 创建创建 C+源文件源文件 C/C+Header
11、 File 创建创建 C/C+头文件头文件 Cursor File 创建光标文件创建光标文件 HTML Page 创建创建 HTML 文件文件 Icon File 创建图标文件创建图标文件 Resource Script 创建资源脚本文件创建资源脚本文件 Text File 文本文文本文 件件 Resource Template 创建资源模板文件创建资源模板文件 SQL Script File 创建创建 SQL 脚本文件脚本文件 File-New-ProjectsVC6.0 可可以以创创建建的的工工程程文文件件类类型型 项项目目类类型型 说说明明 ATL COM AppWizard 创创建建A
12、TL应应用用程程序序 Win32 Dynamic-Link Library 创创建建 Win32 动动态态链链接接库库 MFC ActiveX ControlWizard 创创建建ActiveX控控件件程程序序 MFC AppWizard(dll)创创建建MFC动动态态链链接接库库 Database Project 创创建建数数据据库库工工程程文文件件 Win32 Application 创创建建Win32应应用用程程序序 ISAPI Extension Wizard 创创建建Internet 服服务务器器或或过过滤滤器器 MFC AppWizard(exe)创创建建MFC可可执执行行程程序序
13、 位置断点位置断点数据断点数据断点消息断点消息断点用来用来设置设置删除删除和和查看查看断点断点(a)Breakpoints选项选项(2)VC+的菜单栏的菜单栏-Edit菜单菜单(b)List Members选项选项 利用此选项,利用此选项,可减轻输入代码的工作量。如在变量名之后键入可减轻输入代码的工作量。如在变量名之后键入“.”或或“-”,系统就会自动显示所有有效的成员名供选择,系统就会自动显示所有有效的成员名供选择(c)Type Info选项选项 如果在源代码中将鼠标指针停在某一变量或函数上,那么系统将如果在源代码中将鼠标指针停在某一变量或函数上,那么系统将显示所指变量或函数等的语法显示所指
14、变量或函数等的语法提供有效提供有效的成员名的成员名(d)Parameter Info选项选项 当输入代码时,若在输入函数名当输入代码时,若在输入函数名之后键入左括号,系统将显示该函数之后键入左括号,系统将显示该函数的完整原型,并用黑体显示其第一个的完整原型,并用黑体显示其第一个参数。输入第一个参数之后,接着就参数。输入第一个参数之后,接着就会出现第二个参数,依此类推会出现第二个参数,依此类推(e)Complete Word选项选项 系统自动完成当前语句其余部分的输入。如果不能自动完成,则系统自动完成当前语句其余部分的输入。如果不能自动完成,则给出适当的提示辅助用户完成给出适当的提示辅助用户完成
15、 在在View菜单中可以:菜单中可以:改变窗口改变窗口改变工具栏的显示方式改变工具栏的显示方式检查源代码检查源代码激活调试等激活调试等View-ClassWizard选项选项(a)ClassWizard选项选项(3)VC+的菜单栏的菜单栏-View菜单菜单(a-1)ClassWizard 中的中的Message Maps选项卡选项卡为为窗口窗口、对话框对话框、控件控件、菜单选项菜单选项和和加速键加速键等对象等对象映射消息映射消息创建或创建或删除消删除消息处理息处理函数函数查看编辑消查看编辑消息处理函数息处理函数的代码的代码(a-2)Member Variables选项卡:选项卡:定义成员变量用
16、于自动初始化定义成员变量用于自动初始化其中:其中:Control IDs是映射到成员变量的控件是映射到成员变量的控件ID值值 Type是成员变量的类型是成员变量的类型 Member是成员变量名是成员变量名(b)Resource Symbols选项选项 该选项将打开资源符号浏览器,从中可以该选项将打开资源符号浏览器,从中可以浏览浏览资源编辑符号资源编辑符号资源编辑符号资源编辑符号是映射到整数是映射到整数值上的一串字值上的一串字符,相当于资符,相当于资源的一个代号,源的一个代号,在同一个程序在同一个程序中,资源编辑中,资源编辑符号符号不能重复不能重复(c)Resource Includes选项选项
17、 该对话框包含该对话框包含资源符号头文资源符号头文件名和预处理件名和预处理指令。指令。(d)Workspace选项选项 如果工作区没有显示或者不是处于当如果工作区没有显示或者不是处于当前状态,则选择该项将显示工作区窗口。前状态,则选择该项将显示工作区窗口。(e)Output选项选项 在在输出窗口输出窗口中显示程序建立过程中显示程序建立过程(如编如编译、链接等译、链接等)的有关信息或错误信息的有关信息或错误信息,并且并且显示调试运行时的输出结果。显示调试运行时的输出结果。(a)New Class选项选项 该选项用来创建新类并添加到项目中该选项用来创建新类并添加到项目中(4)VC+的菜单栏的菜单栏
18、-Insert菜单菜单(b)New Form选项选项 该选项用来创建新的该选项用来创建新的表单并添加到项目中表单并添加到项目中(c)Resource选项选项 该选项将打开该选项将打开Insert Resource对话框,用以创建新的资源或对话框,用以创建新的资源或插入资源文件中插入资源文件中(d)Resource Copy选项选项 要选中该选项必须先选中某个资源,否则呈灰色。该要选中该选项必须先选中某个资源,否则呈灰色。该选项用于复制选定的资源选项用于复制选定的资源 使用使用Project可以可以创建创建、修改修改和和存储存储正在编辑的正在编辑的工程文件工程文件 工程文件工程文件组合了一个应用
19、程序的所有源文件的组成部分。工组合了一个应用程序的所有源文件的组成部分。工程文件包含在扩展名为程文件包含在扩展名为.MAK的文件中。的文件中。(5)VC+的菜单栏的菜单栏-Project菜单菜单(b)Add To Project选项选项 选择该选项将打开一个选择该选项将打开一个级联子菜单级联子菜单,通过级通过级连子菜单,连子菜单,可以把文件、文件夹、数据链接以可以把文件、文件夹、数据链接以及及VC组件或控件添加到当前工程文件中组件或控件添加到当前工程文件中(a)Set Active Project选项选项 设定指定的项目为工作区的活动项目设定指定的项目为工作区的活动项目(c)Settings选
20、项选项 选择该选项将弹出选择该选项将弹出Project Settings对话框,其中对话框,其中 General选选项卡项卡用来设置基础类用法和目录用来设置基础类用法和目录指出应用程序与指出应用程序与MFC的链接方式的链接方式指出所建立的应用程序的指出所建立的应用程序的缺省位置为缺省位置为Debug目录目录输出文件的位置输出文件的位置Build菜单用于编译、建立和执行应用程序菜单用于编译、建立和执行应用程序(b)Build选项选项 对最后修改过的源文件进行编译和链接对最后修改过的源文件进行编译和链接(a)Compile选项选项 只编译当前文件而不调用链接器或其它工只编译当前文件而不调用链接器或
21、其它工具。输出窗口将显示编译过程检查出的错误或具。输出窗口将显示编译过程检查出的错误或警告信息,在错误信息处单击鼠标右键,可以警告信息,在错误信息处单击鼠标右键,可以得到错误代码的位置得到错误代码的位置(c)Rebuild All选项选项 该选项允许用户编译所有的源文件,而不管它们何时曾经被修改过该选项允许用户编译所有的源文件,而不管它们何时曾经被修改过(6)V C+的菜单栏的菜单栏-Build菜单菜单(d)Batch Build选项选项 该选项能单步重新建立多个工程文该选项能单步重新建立多个工程文件,并允许用户指定要建立的项目类件,并允许用户指定要建立的项目类型型Win32 Release(
22、发行版)、发行版)、Win32 Debug(调试版)。调试版)。VC提供了两种提供了两种应用程序类型应用程序类型(e)Start Debug选项选项从当前语句开始执从当前语句开始执行程序直到遇到断行程序直到遇到断点或遇到程序结束点或遇到程序结束单步执行程序,单步执行程序,并在遇到函数调并在遇到函数调用时进入函数内用时进入函数内部再从头单步执行部再从头单步执行使程序在运行到当前光使程序在运行到当前光标所在位置时停止标所在位置时停止(相当相当于设置一个临时断点于设置一个临时断点)调试过程中直调试过程中直接进入到正在接进入到正在运行的进程中运行的进程中(a)Source Browse选项选项 编译器
23、在建立项目时会创建与项目中编译器在建立项目时会创建与项目中每一程序文件信息有关的每一程序文件信息有关的.SBR文件。文件。BSCMAKE程序程序将这些将这些.SBR文件汇编为文件汇编为单个浏览信息数据库单个浏览信息数据库 选择选择Source Browse将将弹出浏览窗口,它显弹出浏览窗口,它显示与程序中所有符号示与程序中所有符号(类、函数、数据、宏类、函数、数据、宏和类型和类型)有关的信息有关的信息Tools菜单允许用户快速地菜单允许用户快速地访问多个不同的开发工具访问多个不同的开发工具(7)VC+的菜单栏的菜单栏-Tools菜单菜单在工作区中添加项目:在工作区中添加项目:用用File-Op
24、en选项可选项可打开已存在的项目;通打开已存在的项目;通过过New对话框的对话框的Projects选项卡创建新的项目,选项卡创建新的项目,并选择并选择Add to current workspace复选框。复选框。VC以项目工作区以项目工作区的形式来组织文件、的形式来组织文件、项目和项目配置项目和项目配置1.创建新的项目工作区创建新的项目工作区创建新的空工作区步骤:创建新的空工作区步骤:(a)File-New-Workspaces-输入输入工作区名字工作区名字并指定并指定工作区目录工作区目录 VC项目工作区由项目工作区由ClassView、ResourceView及及FileView三个三个面
25、板组成面板组成 在在VC中,源代码或资源编辑器为了引用资源和用户中,源代码或资源编辑器为了引用资源和用户自定义的其它对象,于是就引入了一种与资源一一对应的自定义的其它对象,于是就引入了一种与资源一一对应的符号即符号即资源符号资源符号,使之能够以字符串的方式被引用。,使之能够以字符串的方式被引用。资源符号资源符号是映射到整数值上的一串字符,是一种标识是映射到整数值上的一串字符,是一种标识符。每当创建一个新的资源或资源对象时,系统就会为其符。每当创建一个新的资源或资源对象时,系统就会为其提供一个缺省的资源符号名称并赋一个整数值,该定义保提供一个缺省的资源符号名称并赋一个整数值,该定义保存在存在re
26、source.h文件中。文件中。资源资源图标图标光标光标菜单菜单位图位图对话框对话框资源是一种界面元素,资源是一种界面元素,用户可以从中获得信息用户可以从中获得信息并在其中执行某个动作并在其中执行某个动作 类别类别 资源符号前缀资源符号前缀 代表的资源或对象代表的资源或对象 IDR_ 加速键或菜单及相关资源加速键或菜单及相关资源 IDD_ 对话框资源对话框资源 IDC_ 光标资源光标资源 IDI_ 图标资源图标资源 资资 源源 IDB_ 位图资源位图资源 IDM_ 菜单项菜单项 ID_ 命令项命令项 菜 单 项 命 令菜 单 项 命 令控制控制 IDC_ 控件控件 IDS_ 字符串表中的字符串
27、字符串表中的字符串 字符串字符串 IDP_ 消息框中使用的字符串消息框中使用的字符串 资源符号的取值范围一般为资源符号的取值范围一般为032767 VC Programmers Guide:VC程序员指南。程序员指南。VC Users Guide:VC用户指南。用户指南。VC Tutorials:VC教程。教程。MFC and Templates:微软基础类库和模板参考信息。微软基础类库和模板参考信息。Languages and Libraries for C+:C+语言和库文件信息语言和库文件信息。VC帮助系统帮助系统主要提供主要提供五五个个方面内容方面内容MFC库中的类按层次关系划分类:库
28、中的类按层次关系划分类:(1)根类:)根类:CObject(2)应用程序体系结构类应用程序体系结构类(3)窗口、对话框和控件类)窗口、对话框和控件类(4)绘图和打印类)绘图和打印类(5)简单数据类型类)简单数据类型类(6)数组、列表和映射类)数组、列表和映射类(7)文件和数据库类)文件和数据库类(8)Internet和网络工作类和网络工作类(9)OLE类类(10)调试和异常类)调试和异常类1 1命令相关类:命令相关类:CCmdTargetCCmdTarget类类该类是该类是CObjectCObject的子类,它是的子类,它是MFCMFC库中所有具有消息映射属性的库中所有具有消息映射属性的基类。
29、消息映射规定了当一对象接收到消息命令时,应调用哪基类。消息映射规定了当一对象接收到消息命令时,应调用哪一个函数对该消息进行处理一个函数对该消息进行处理2 2线程基类:线程基类:CWinThreadCWinThread类类所有线程的基类,可直接使用。所有线程的基类,可直接使用。CWinAppCWinApp类就是从类就是从CWinThreadCWinThread类中派生出来的类中派生出来的4 4文档文档/视类视类 文档对象由文档模板对象创建,管理应用程序的文档对象由文档模板对象创建,管理应用程序的数据。视对象表示一个窗口的客户区,显示文档数据数据。视对象表示一个窗口的客户区,显示文档数据并允许用户
30、与之交互并允许用户与之交互3 3窗口应用程序类:窗口应用程序类:CWinAppCWinApp类类 每个应用程序有且只有一个应用程序对象,在运每个应用程序有且只有一个应用程序对象,在运行程序中该对象与其它对象相互协调,该对象从行程序中该对象与其它对象相互协调,该对象从CWinAppCWinApp类中派生出来。类中派生出来。CWinAppCWinApp类封装了初始化、运类封装了初始化、运行、终止应用程序的代码。行、终止应用程序的代码。2 2视类:视类:CViewCView类类该类表示框架窗口的客户区和显示文档数据并接收输入的客户该类表示框架窗口的客户区和显示文档数据并接收输入的客户区,其派生类主要
31、有如下几种:区,其派生类主要有如下几种:lCScrollViewCScrollView:具有滚动功能的视的基类具有滚动功能的视的基类lCFormViewCFormView:其布局在对话资源中定义的滚动视其布局在对话资源中定义的滚动视lCEditViewCEditView:具有文本编辑、查找、替换和滚动功能的视具有文本编辑、查找、替换和滚动功能的视1 1窗口类:窗口类:CWndCWnd类类CWndCWnd提供了提供了MFCMFC中所有窗中所有窗口类的基本功能,是口类的基本功能,是CCmdTargetCCmdTarget类的子类类的子类创建创建WindowsWindows窗口要分两窗口要分两步进行
32、步进行引入构造函数,构引入构造函数,构造一个造一个CWndCWnd对象对象调用调用CreateCreate建立建立WindowsWindows窗窗口,并将它连到口,并将它连到CWndCWnd对象上对象上3 3菜单类:菜单类:CMenuCMenu类类该类是该类是CObjectCObject类的子类,用于管理菜单。它是一个类的子类,用于管理菜单。它是一个Windows Windows HMenuHMenu的封装,提供了与窗口有关的菜单资源建立、修改、跟的封装,提供了与窗口有关的菜单资源建立、修改、跟踪及删除的成员函数。踪及删除的成员函数。4 4对话框类:对话框类:CDialogCDialog类类由
33、于对话框是一个特殊的窗口,所以该类是从由于对话框是一个特殊的窗口,所以该类是从CWndCWnd类中派生出类中派生出来的。对话框子层次结构包括通用对话框类来的。对话框子层次结构包括通用对话框类CDialogCDialog以及支持以及支持文件选择、颜色选择、字体选择、打印、替换文本的公共对话文件选择、颜色选择、字体选择、打印、替换文本的公共对话框子类。框子类。5 5控件类控件类 控件子层次结构包括若干类,使用这些类可建立静态文本、控件子层次结构包括若干类,使用这些类可建立静态文本、命令按钮、位图按钮、列表框、组合框、滚动条、编辑框等。命令按钮、位图按钮、列表框、组合框、滚动条、编辑框等。这些直观控
34、件为这些直观控件为WindowsWindows应用程序提供了各种输入和显示界面。应用程序提供了各种输入和显示界面。6 6控件条类:控件条类:CControlBarCControlBar类类 控件条子层次结构为工具条、状态条、对话条和分割窗口控件条子层次结构为工具条、状态条、对话条和分割窗口建立模型。该类是建立模型。该类是CToolBarCToolBar、CStatusBarCStatusBar、CDialogBarCDialogBar的基的基类,负责管理工具条、状态条、对话条的一些成员函数。控件类,负责管理工具条、状态条、对话条的一些成员函数。控件条指的是连接在主窗口框架的顶部或底部的小窗口条
35、指的是连接在主窗口框架的顶部或底部的小窗口7 7绘画对象类:绘画对象类:CGdiObjectCGdiObject类类图形绘画对象子层次结构以图形绘画对象子层次结构以CGdiObjectCGdiObject类为根类,可用于建类为根类,可用于建立绘画对象模型,如画笔、刷子、字体、位图、调色板等。立绘画对象模型,如画笔、刷子、字体、位图、调色板等。8 8设备描述表类:设备描述表类:CDCCDC类类该类及其子类支持设备描述表对象,是该类及其子类支持设备描述表对象,是CObjectCObject类的子类。类的子类。CDCCDC类是一个较大的类,包括许多成员函数,如映射函数、类是一个较大的类,包括许多成员
36、函数,如映射函数、绘画工具函数、区域函数等,通过绘画工具函数、区域函数等,通过CDCCDC对象的成员函数可以对象的成员函数可以完成所有的绘画工作完成所有的绘画工作MFC 中全局函数和全局变量中全局函数和全局变量AfxAbort:无条件终止一个应用程序无条件终止一个应用程序AfxBeginThread:创建一个新线程并执行它创建一个新线程并执行它AfxEndThread:终止当前正在执行的线程终止当前正在执行的线程AfxMessageBox:显示一个显示一个Windows消息框消息框AfxGetApp:返回当前应用程序对象的指针返回当前应用程序对象的指针AfxGetInstanceHandle:
37、返回标识当前应用程序对象的句柄返回标识当前应用程序对象的句柄AfxRegisterWndClass:注册用于创建注册用于创建Windows窗口的窗口类窗口的窗口类theApp 应用程序唯一的全局对象应用程序唯一的全局对象 图形设备接口图形设备接口GDI Windows图形设备接口图形设备接口(GDI)是为)是为与与设备无关设备无关的图形设计的。所谓设备的无的图形设计的。所谓设备的无关性,就是操作系统屏蔽了硬件设备的差关性,就是操作系统屏蔽了硬件设备的差异,因而设备无关性能使用户编程时无需异,因而设备无关性能使用户编程时无需考虑特殊的硬件设置考虑特殊的硬件设置。GDI负责系统与用户或绘图程序之间
38、负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上的信息交换,并控制在输出设备上显示图显示图形形或或文字文字。nGDIGDI的一些概念的一些概念n绘图工具对象绘图工具对象n绘图函数绘图函数n文本的显示文本的显示图形设备接口图形设备接口GDInGDIGDI的一些概念的一些概念n绘图工具对象绘图工具对象n绘图函数绘图函数n文本和字体文本和字体图形设备接口图形设备接口GDIWindows系统系统外设外设直接访问直接访问不允许不允许统一的设备环境统一的设备环境(DC)提供提供使应用程序与设备相连使应用程序与设备相连用用户户GDI的一些概念的一些概念设备环境设备环境(上下文)(上下文)DCGDI
39、的一些概念的一些概念CDC类类 CDC类提供与绘图有关的所有操作类提供与绘图有关的所有操作函数,如:绘图工具对象的选择;绘图函数,如:绘图工具对象的选择;绘图属性、映射模式、视口等的设置;提供属性、映射模式、视口等的设置;提供坐标转换、裁剪和绘制简单图形、显示坐标转换、裁剪和绘制简单图形、显示文本的函数等。文本的函数等。派生自派生自CDC类的还有类的还有CPaintDC、CClientDC、CWindowDC、CMetaFileDC。GDI的一些概念的一些概念CDC类类CreateDC、CreateCompatibleDC、DeleteDC Attach、Detach GetCurrentBr
40、ush、GetCurrentFont、GetCurrentPalette、GetCurrentPen、GetWindow SelectObject、SelectStockObjectSelectPalette、RealizePaletteGetBkColor、SetBkColor、GetBkMode、SetBkMode、GetPolyFillMode、SetPolyFillMode、GetROP2、SetROP2、GetStretchBltMode、SetStretchBltMode、GetTextColor、SetTextColorGetMapMode、SetMapMode、GetViewp
41、ortExt、SetViewportExt、GetWindowExt、SetWindowExtPatBlt、BitBlt、StretchBlt、GetPixel、SetPixel图形刷新图形刷新图形刷新图形刷新是绘图过程中必须考虑的重要问题是绘图过程中必须考虑的重要问题刷新请求刷新请求对刷新请求的响应对刷新请求的响应刷新方法刷新方法包括(1)刷新请求刷新请求 窗口大小的调整窗口大小的调整窗口移动窗口移动被覆盖后的恢复被覆盖后的恢复GDI的一些概念的一些概念GDI的一些概念的一些概念(2)系统对刷新请求的响应系统对刷新请求的响应 当用户区的内容需要刷新时,系统向应用程序消当用户区的内容需要刷新时
42、,系统向应用程序消息队列发送息队列发送WM_PAINT消息消息三种三种刷新刷新窗口移动后的刷新窗口移动后的刷新被覆盖区域的刷新被覆盖区域的刷新对象穿越后的刷新对象穿越后的刷新(系统自动完成)用户区移动或显示用户区移动或显示用户窗口大小改变用户窗口大小改变程序通过滚动条滚动窗口程序通过滚动条滚动窗口窗口被另一个窗口覆盖的窗口被另一个窗口覆盖的恢复如下拉式菜单关闭等恢复如下拉式菜单关闭等光标穿过用户区光标穿过用户区图标拖过用户区图标拖过用户区窗口被另一个窗口覆盖的区域称为窗口被另一个窗口覆盖的区域称为无效区域无效区域。Windows系统为每个窗口建立了一个系统为每个窗口建立了一个PAINTSTRU
43、CT结构,结构,该结构中包含了该结构中包含了包围无效区域的一个最小矩形包围无效区域的一个最小矩形的结构的结构RECT,应用程序可以根据这个无效矩形执行刷新操作。应用程序可以根据这个无效矩形执行刷新操作。typedef struct typedef struct tagPAINTSTRUCTtagPAINTSTRUCT HDC HDC hdchdc;/设备环境句柄设备环境句柄 BOOL BOOL fErasefErase;/;/一般取真值,表示擦除无效矩形的背景一般取真值,表示擦除无效矩形的背景 RECT RECT rcPaintrcPaint;/无效矩形标识无效矩形标识 BOOL BOOL f
44、RestorefRestore;/系统保留系统保留 BOOL BOOL fIncUpdatefIncUpdate;/系统保留系统保留 BYTE rgbReserved32BYTE rgbReserved32;/系统保留系统保留 PAINTSTRUCT;PAINTSTRUCT;GDI的一些概念的一些概念常用的常用的windows应用应用程序刷新窗口程序刷新窗口的方法的方法保存副本。刷新时将副本拷贝到保存副本。刷新时将副本拷贝到相应的窗口中。相应的窗口中。记录事件。刷新时重新执行这个记录事件。刷新时重新执行这个曾经发生的事件。曾经发生的事件。重新绘制。将图形绘制处理程序重新绘制。将图形绘制处理程序
45、放在消息放在消息WM_PAINT响应模块响应模块中,刷新时重绘图形。中,刷新时重绘图形。(3)有效的刷新方法有效的刷新方法GDI的一些概念的一些概念激活刷新的激活刷新的MFC窗口类的函数窗口类的函数GDI的一些概念的一些概念BOOL InvalidateRect(LPCRECT lpRect,BOOL bErase=TRUE);BOOL Invalidate(BOOL bErase=TRUE);void InvalidateRgn(HRGN hRgn,BOOL bErase=TRUE);获取设备环境获取设备环境DC的方法的方法 获取设备环境是应用程序输出图形的先决条件,常用的两种获取设备环境是
46、应用程序输出图形的先决条件,常用的两种方法是调用函数方法是调用函数BeginPaint或或GetDC 1、应用程序响应、应用程序响应WM_PAINT消息进行图形刷新时,主要消息进行图形刷新时,主要通过调用通过调用BeginPaint函数获取设备环境函数获取设备环境 hdchdc=BeginPaint(hwnd,&psBeginPaint(hwnd,&ps);/psps为为PAINTSTRUCTPAINTSTRUCT类型结构类型结构由由BeginPaintBeginPaint函数获取的设备环境要用函数获取的设备环境要用EndPaintEndPaint函数释放函数释放BOOL BOOL EndPa
47、int(HWNDEndPaint(HWND hwnd,PAINTSTRUCT&hwnd,PAINTSTRUCT&psps)GDI的一些概念的一些概念 2、如果绘图工作并非由如果绘图工作并非由WM_PAINT消息驱动,则调用消息驱动,则调用GetDC函数获取设备环境或函数获取设备环境或CClientDC 构造一构造一CDC对象对象。CWnd:GetDC CDC*GetDC();CDC*GetWindowDC();CClientDC(CWnd*pWnd);由由GetDC函数获取的设备环境必须用函数获取的设备环境必须用ReleaseDC函数释放。函数释放。GDI的一些概念的一些概念GDI的一些概念的
48、一些概念BeginPaint 与与 GetDC的区别的区别项目项目 函数函数BeginPaint 函数函数GetDc 函数函数使用环境使用环境只用于图形刷新时获只用于图形刷新时获取设备环境取设备环境使用较为广泛使用较为广泛操作区域操作区域使用使用 BeginPaint函数函数获取设备环境后,操作获取设备环境后,操作区域为无效区域区域为无效区域使用使用 GetDC函数获函数获取设备环境后,操作取设备环境后,操作区域为整个用户区区域为整个用户区释放设备环释放设备环境所用函数境所用函数由由 EndPaint 函数释放函数释放由由 ReleaseDC 函数释函数释放放获取设备环境获取设备环境DC的方法
49、的方法映像模式映像模式 映像模式定义了将逻辑单位转化为设备的度量单映像模式定义了将逻辑单位转化为设备的度量单位以及设备的位以及设备的x方向和方向和y方向,程序员可在一个统一的方向,程序员可在一个统一的逻辑坐标系中操作而不必考虑输出设备的坐标系。逻辑坐标系中操作而不必考虑输出设备的坐标系。窗口窗口:对应逻辑坐标系上程序员设定的区域:对应逻辑坐标系上程序员设定的区域视口视口:对应实际输出设备上程序员设定的区域:对应实际输出设备上程序员设定的区域GDI的一些概念的一些概念GDI的一些概念的一些概念窗口窗口视区变换视区变换通常解决下面几个方面的问题:通常解决下面几个方面的问题:(1)窗口逻辑坐标与视区
50、设备坐标之间的转换。)窗口逻辑坐标与视区设备坐标之间的转换。(2)用户坐标系到屏幕坐标系,坐标轴方向可)用户坐标系到屏幕坐标系,坐标轴方向可能改变,还有坐标原点的映射问题;能改变,还有坐标原点的映射问题;(3)用户坐标系中窗口区的图形坐标转换到视)用户坐标系中窗口区的图形坐标转换到视图区上的坐标需要取整。图区上的坐标需要取整。(4)如果视图区水平分辨率和垂直分辨率不同,)如果视图区水平分辨率和垂直分辨率不同,为了保持图形不变形,还要进行比例变换。为了保持图形不变形,还要进行比例变换。1000011dbcayxyxwwvv映映像像模模式式将将一一个个逻逻辑辑单单位位映映射射为为坐坐标标系系设设定