VC++编程基础知识

上传人:s9****2 文档编号:575677863 上传时间:2024-08-18 格式:PPT 页数:130 大小:1.45MB
返回 下载 相关 举报
VC++编程基础知识_第1页
第1页 / 共130页
VC++编程基础知识_第2页
第2页 / 共130页
VC++编程基础知识_第3页
第3页 / 共130页
VC++编程基础知识_第4页
第4页 / 共130页
VC++编程基础知识_第5页
第5页 / 共130页
点击查看更多>>
资源描述

《VC++编程基础知识》由会员分享,可在线阅读,更多相关《VC++编程基础知识(130页珍藏版)》请在金锄头文库上搜索。

1、VC+编程基础编程基础(补充补充)一、一、Windows应用程序应用程序二、二、VC+编程环境介绍编程环境介绍三、三、VC+交互编程基础交互编程基础四、四、Windows图形编程图形编程Windows应用程序的相关概念应用程序的相关概念Windows应用程序设计方法应用程序设计方法(1)使用)使用Windows提供的提供的WindowsAPI函数函数WindowsAPI是是Windows系统和系统和Windows应用程序间的标准程序接口,应用程序可以通过应用程序间的标准程序接口,应用程序可以通过此接口访问系统此接口访问系统(2)使用)使用Microsoft提供的提供的MFC类库类库MFC类库集

2、成了大量已经预先定义好的类,用类库集成了大量已经预先定义好的类,用户可以根据编程的需要调用相应的类,或根据需户可以根据编程的需要调用相应的类,或根据需要自定义有关的类。要自定义有关的类。 Windows应用程序的相关概念应用程序的相关概念nWindows应用程序开发模式值得注意的几个方面:应用程序开发模式值得注意的几个方面:MessageProcessing TheWindowsGraphicsDeviceInterfaceResource-BasedProgrammingMemoryManagementDynamicLinkLibrariesTheWin32ApplicationProgra

3、mmingInterfaceWindows应用程序的相关概念应用程序的相关概念nWindows应用程序基本结构:应用程序基本结构:开始执行开始执行初始化应用初始化应用初始化和创建初始化和创建应用窗口应用窗口进入消息循环并进入消息循环并从消息队列得到从消息队列得到一个消息一个消息当前消息是当前消息是否否“退出退出”?终止执行终止执行程序是否定义程序是否定义了对此消息的了对此消息的处理处理进行默认处理进行默认处理处理消息处理消息Windows应用程序的相关概念应用程序的相关概念nWindows应用程序以消息为基础,以事件驱动之。应用程序以消息为基础,以事件驱动之。事件驱动程序设计事件驱动程序设计是

4、是围绕着消息围绕着消息的产的产生与处理而展开的。一条消息是关于发生生与处理而展开的。一条消息是关于发生的事件的信息。作为一个的事件的信息。作为一个Windows程序程序员,其工作就是对正开发的应用程序所要员,其工作就是对正开发的应用程序所要发出或要接收的消息进行发出或要接收的消息进行排序和管理排序和管理。Windows应用程序的相关概念应用程序的相关概念nWindows消息的结构消息的结构MSG:typedefstructtagMSGHWNDhwnd;UINTmessage;WPARAMwParam;LPARAMlParam;DWORDtime;POINTpt;MSG,*PMSG;Window

5、s应用程序的相关概念应用程序的相关概念nWindows消息的处理:消息的处理:MSGmsg/定义一个定义一个MSG类型的变类型的变量量while(GetMessage(&msg,NULL,0,0)/产生一个消息循环,等待消息的到来产生一个消息循环,等待消息的到来TranslateMessage(&msg);/解译消息解译消息DispatchMessage(&msg);/将消息传递给将消息传递给窗口函数,以便处理相应的消息窗口函数,以便处理相应的消息Windows应用程序的相关概念应用程序的相关概念nWindows应用程序中的应用程序中的数据类型及常量数据类型及常量 typedefunsigne

6、d char BYTEtypedefunsigned short WORDtypedefunsigned long DWORDtypedeflong LONGtypedefchar *PSTRtypedef char NEAR *NPSTtypedefchar FAR*LPSTRtypedefvoid VOID#denfineWM_QUIT0X0012Windows应用程序的相关概念应用程序的相关概念nWindows应用程序中的应用程序中的数据类型及常量数据类型及常量 类型类型说明说明CS窗口类的风格(窗口类的风格(ClassStyle)IDI预定义的图标对象的标识符(预定义的图标对象的标识符

7、(IDentityofIcon)IDC预定义的光标对象的标识符(预定义的光标对象的标识符(IDentityofCursor)WS窗口的风格(窗口的风格(WindowsStyle)CW创建窗口(创建窗口(CreateWindows)WM窗口消息(窗口消息(WindowsMessage)DT绘制文本(绘制文本(DrawingText)一些常见常量的前缀意义一些常见常量的前缀意义Windows应用程序的相关概念应用程序的相关概念nWindows应用程序中的应用程序中的数据类型及常量数据类型及常量 在变量名的表示方法方面,在变量名的表示方法方面,Windows推荐使用一种推荐使用一种称为称为“匈牙利表

8、示法匈牙利表示法”的方法。每个变量名用的方法。每个变量名用小写字母小写字母或描述了变量的或描述了变量的数据类型数据类型的字母作为前缀,变量的名字的字母作为前缀,变量的名字紧跟其后,且用紧跟其后,且用大写字母开始的单词大写字母开始的单词(一个或多个单词)(一个或多个单词)表示其含义,这样每个变量都能附加上其数据类型的助表示其含义,这样每个变量都能附加上其数据类型的助记符。例如:记符。例如:WORDwOffset;/w表示表示WORD类型类型DWORDdwValue;/dw表示表示DWORD类型类型Windows应用程序的相关概念应用程序的相关概念nWindows应用程序中的应用程序中的数据类型及

9、常量数据类型及常量 类型类型说明说明bBOOL,布尔类型,布尔类型byBYTE类型类型cchar类型类型dwDWORD类型类型lLONG类型类型lp远(长)远(长)指针指针(longpointer)n短整型短整型p指针指针s字符串字符串VC+编程环境介绍编程环境介绍1 Visual C+1 Visual C+简介简介 是是Windows环境下最主要的应用开发系统之一环境下最主要的应用开发系统之一 是是C+语言的集成开发环境语言的集成开发环境 与与Win32紧密相连紧密相连 强大的调试功能为大型复杂软件的开发提供了有效的排错手段强大的调试功能为大型复杂软件的开发提供了有效的排错手段2 2 可视化

10、可视化 指软件开发阶段的可视化指软件开发阶段的可视化 利用计算机图形技术和方法利用计算机图形技术和方法VC+编程环境介绍编程环境介绍3 3 开发环境开发环境开发环境是程序员同开发环境是程序员同VC+的交互界面的交互界面通过通过它,它,可以可以创创建建工工程程文文件件访访问问资资源源编编辑辑器器使使用用内内部部调调试试器器访访问问程程序序源源代代码码File-New-Files(1)VC+的菜单栏的菜单栏-FileFile菜单菜单Visual C+6.0 可以创建的文件类型可以创建的文件类型 文件类型文件类型 说明说明 文件类型文件类型 说明说明 Active Server Page 网页制作网

11、页制作 Binary File 创建二进制文件创建二进制文件 Bitmap File 创建位图文件创建位图文件 C+ Source File 创建创建 C+源文件源文件 C/C+ Header File 创建创建 C/C+ 头文件头文件 Cursor File 创建光标文件创建光标文件 HTML Page 创建创建 HTML 文件文件 Icon File 创建图标文件创建图标文件 Resource Script 创建资源脚本文件创建资源脚本文件 Text File 文本文文本文 件件 Resource Template 创建资源模板文件创建资源模板文件 SQL Script File 创建创建

12、 SQL 脚本文件脚本文件 File-New-Projects断点作用:断点作用:断点作用:断点作用: 中断程序的执行过中断程序的执行过中断程序的执行过中断程序的执行过程,以便检查程序代码、程,以便检查程序代码、程,以便检查程序代码、程,以便检查程序代码、变量和寄存器值变量和寄存器值变量和寄存器值变量和寄存器值位置断点位置断点数据断点数据断点消息断点消息断点用来用来设置设置删除删除和和查看查看断点断点(a) Breakpoints选项选项(2)VC+的菜单栏的菜单栏-Edit菜单菜单(b) List Members选项选项 利用此选项,利用此选项,可减轻输入代码的工作量。如在变量名之后键入可减

13、轻输入代码的工作量。如在变量名之后键入“.”或或“-”,系统就会自动显示所有有效的成员名供选择,系统就会自动显示所有有效的成员名供选择(c) Type Info选项选项 如果在源代码中将鼠标指针停在某一变量或函数上,那么系统将如果在源代码中将鼠标指针停在某一变量或函数上,那么系统将显示所指变量或函数等的语法显示所指变量或函数等的语法提供有效提供有效的成员名的成员名(d) Parameter Info选项选项 当输入代码时,若在输入函数名当输入代码时,若在输入函数名之后键入左括号,系统将显示该函数之后键入左括号,系统将显示该函数的完整原型,并用黑体显示其第一个的完整原型,并用黑体显示其第一个参数

14、。输入第一个参数之后,接着就参数。输入第一个参数之后,接着就会出现第二个参数,依此类推会出现第二个参数,依此类推(e) Complete Word选项选项 系统自动完成当前语句其余部分的输入。如果不能自动完成,则系统自动完成当前语句其余部分的输入。如果不能自动完成,则给出适当的提示辅助用户完成给出适当的提示辅助用户完成 在在View菜单中可以:菜单中可以:改变窗口改变窗口改变工具栏的显示方式改变工具栏的显示方式检查源代码检查源代码激活调试等激活调试等View-ClassWizard选项选项(a) ClassWizard选项选项(3)VC+的菜单栏的菜单栏-View菜单菜单(a-1) Class

15、Wizard 中的中的Message Maps选项卡选项卡为为窗口窗口、对话框对话框、控件控件、菜单选项菜单选项和和加速键加速键等对象等对象映射消息映射消息创建或创建或删除消删除消息处理息处理函数函数查看编辑消查看编辑消息处理函数息处理函数的代码的代码(a-2) Member Variables选项卡:选项卡: 定义成员变量用于自动初始化定义成员变量用于自动初始化其中:其中: Control IDs是映射到成员变量的控件是映射到成员变量的控件ID值值 Type是成员变量的类型是成员变量的类型 Member是成员变量名是成员变量名(b) Resource Symbols选项选项 该选项将打开资源

16、符号浏览器,从中可以该选项将打开资源符号浏览器,从中可以浏览浏览资源编辑符号资源编辑符号资源编辑符号资源编辑符号是映射到整数是映射到整数值上的一串字值上的一串字符,相当于资符,相当于资源的一个代号,源的一个代号,在同一个程序在同一个程序中,资源编辑中,资源编辑符号符号不能重复不能重复(c) Resource Includes选项选项 该对话框包含该对话框包含资源符号头文资源符号头文件名和预处理件名和预处理指令。指令。(d) Workspace选项选项 如果工作区没有显示或者不是处于当如果工作区没有显示或者不是处于当前状态,则选择该项将显示工作区窗口。前状态,则选择该项将显示工作区窗口。(e)

17、Output选项选项 在在输出窗口输出窗口中显示程序建立过程中显示程序建立过程(如编如编译、链接等译、链接等)的有关信息或错误信息的有关信息或错误信息,并且并且显示调试运行时的输出结果。显示调试运行时的输出结果。(a) New Class选项选项 该选项用来创建新类并添加到项目中该选项用来创建新类并添加到项目中(4)VC+的菜单栏的菜单栏-Insert菜单菜单(b) New Form选项选项 该选项用来创建新的该选项用来创建新的表单并添加到项目中表单并添加到项目中(c) Resource选项选项 该选项将打开该选项将打开Insert Resource对话框,用以创建新的资源或对话框,用以创建新

18、的资源或插入资源文件中插入资源文件中 (d) Resource Copy选项选项 要选中该选项必须先选中某个资源,否则呈灰色。该要选中该选项必须先选中某个资源,否则呈灰色。该选项用于复制选定的资源选项用于复制选定的资源 使用使用Project可以可以创建创建、修改修改和和存储存储正在编辑的正在编辑的工程文件工程文件 工程文件工程文件组合了一个应用程序的所有源文件的组成部分。工组合了一个应用程序的所有源文件的组成部分。工程文件包含在扩展名为程文件包含在扩展名为.MAK的文件中。的文件中。(5)VC+的菜单栏的菜单栏-Project菜单菜单(b) Add To Project选项选项 选择该选项将

19、打开一个选择该选项将打开一个级联子菜单级联子菜单,通过级通过级连子菜单,连子菜单,可以把文件、文件夹、数据链接以可以把文件、文件夹、数据链接以及及VC组件或控件添加到当前工程文件中组件或控件添加到当前工程文件中(a) Set Active Project选项选项 设定指定的项目为工作区的活动项目设定指定的项目为工作区的活动项目(c) Settings选项选项 选择该选项将弹出选择该选项将弹出Project Settings对话框,其中对话框,其中 General选选项卡项卡用来设置基础类用法和目录用来设置基础类用法和目录指出应用程序与指出应用程序与MFC的链接方式的链接方式指出所建立的应用程序

20、的指出所建立的应用程序的缺省位置为缺省位置为Debug目录目录输出文件的位置输出文件的位置Build菜单用于编译、建立和执行应用程序菜单用于编译、建立和执行应用程序(b) Build选项选项 对最后修改过的源文件进行编译和链接对最后修改过的源文件进行编译和链接(a) Compile选项选项 只编译当前文件而不调用链接器或其它工只编译当前文件而不调用链接器或其它工具。输出窗口将显示编译过程检查出的错误或具。输出窗口将显示编译过程检查出的错误或警告信息,在错误信息处单击鼠标右键,可以警告信息,在错误信息处单击鼠标右键,可以得到错误代码的位置得到错误代码的位置(c) Rebuild All选项选项

21、该选项允许用户编译所有的源文件,而不管它们何时曾经被修改过该选项允许用户编译所有的源文件,而不管它们何时曾经被修改过(6)VC+的菜单栏的菜单栏-Build菜单菜单(d) Batch Build选项选项 该选项能单步重新建立多个工程文该选项能单步重新建立多个工程文件,并允许用户指定要建立的项目类型件,并允许用户指定要建立的项目类型Win32 Release(发行版)、发行版)、Win32 Debug(调试版)。调试版)。VC提供了两种提供了两种应用程序类型应用程序类型(e) Start Debug选项选项从当前语句开始执从当前语句开始执行程序直到遇到断行程序直到遇到断点或遇到程序结束点或遇到程

22、序结束单步执行程序,单步执行程序,并在遇到函数调并在遇到函数调用时进入函数内用时进入函数内部再从头单步执行部再从头单步执行使程序在运行到当前光使程序在运行到当前光标所在位置时停止标所在位置时停止(相当相当于设置一个临时断点于设置一个临时断点)调试过程中直调试过程中直接进入到正在接进入到正在运行的进程中运行的进程中(a)Source Browse选项选项 编编译译器器在在建建立立项项目目时时会会创创建建与与项项目目中中每一程序文件信息有关的每一程序文件信息有关的.SBR文件。文件。BSCMAKE程程序序将将这这些些.SBR文文件件汇汇编编为为单个浏览信息数据库单个浏览信息数据库 选择选择Sour

23、ce Browse将将弹出浏览窗口,它显弹出浏览窗口,它显示与程序中所有符号示与程序中所有符号(类、函数、数据、宏类、函数、数据、宏和类型和类型)有关的信息有关的信息Tools菜单允许用户快速地菜单允许用户快速地访问多个不同的开发工具访问多个不同的开发工具(7)VC+的菜单栏的菜单栏-Tools菜单菜单在工作区中添加项目:在工作区中添加项目: 用用File-Open选项可选项可打开已存在的项目;通打开已存在的项目;通过过New对话框的对话框的Projects选项卡创建新的项目,选项卡创建新的项目,并选择并选择Add to current workspace复选框。复选框。 VC以项目工作区以项

24、目工作区的形式来组织文件、的形式来组织文件、项目和项目配置项目和项目配置1. 创建新的项目工作区创建新的项目工作区创建新的空工作区步骤:创建新的空工作区步骤:(a) File-New-Workspaces- 输入输入工作区名字工作区名字并指定并指定工作区目录工作区目录2. 2. 项目工作区窗口简介项目工作区窗口简介 VC项目工作区由项目工作区由ClassView、ResourceView及及FileView三个三个面板组成面板组成 在在VC中,源代码或资源编辑器为了引用资源和用户自中,源代码或资源编辑器为了引用资源和用户自定义的其它对象,于是就引入了一种与资源一一对应的符定义的其它对象,于是就

25、引入了一种与资源一一对应的符号即号即资源符号资源符号,使之能够以字符串的方式被引用。,使之能够以字符串的方式被引用。 资源符号资源符号是映射到整数值上的一串字符,是一种标识是映射到整数值上的一串字符,是一种标识符。每当创建一个新的资源或资源对象时,系统就会为其符。每当创建一个新的资源或资源对象时,系统就会为其提供一个缺省的资源符号名称并赋一个整数值,该定义保提供一个缺省的资源符号名称并赋一个整数值,该定义保存在存在resource.h文件中。文件中。资源资源图标图标光标光标菜单菜单位图位图对话框对话框资源是一种界面元素,资源是一种界面元素,用户可以从中获得信息用户可以从中获得信息并在其中执行某

26、个动作并在其中执行某个动作资源及资源编辑器资源及资源编辑器资源符号的取值范围一般为资源符号的取值范围一般为032767(2) (2) 资源符号定义的常用前缀资源符号定义的常用前缀VC Programmers Guide:VC程序员指南。程序员指南。VC Users Guide:VC用户指南。用户指南。VC Tutorials:VC教程。教程。MFC and Templates:微软基础类库和模板参考信息。微软基础类库和模板参考信息。Languages and Libraries for C+:C+语言和库文件信息语言和库文件信息。VC帮助系统帮助系统主要提供主要提供五五个个方面内容方面内容联机

27、帮助联机帮助VC+交互编程基础交互编程基础 MFCMFC是用来编写是用来编写WindowsWindows应用程序的应用程序的C+C+类集,该类集以层次结构组织起来,类集,该类集以层次结构组织起来,其中封装了大部分其中封装了大部分Windows APIWindows API函数和函数和WindowsWindows控件,它所包含的功能涉及到整控件,它所包含的功能涉及到整个个WindowsWindows操作系统。操作系统。 MFCMFC不仅为用户提供了不仅为用户提供了 WindowsWindows图形图形环境下应用程序的框架,而且还提供了创环境下应用程序的框架,而且还提供了创建应用程序的组件。建应用

28、程序的组件。MFC库中的类按层次关系划分类:库中的类按层次关系划分类:(1)根类:)根类:CObject(2)应用程序体系结构类应用程序体系结构类(3)窗口、对话框和控件类)窗口、对话框和控件类(4)绘图和打印类)绘图和打印类(5)简单数据类型类)简单数据类型类(6)数组、列表和映射类)数组、列表和映射类(7)文件和数据库类)文件和数据库类(8)Internet和网络工作类和网络工作类(9)OLE类类(10)调试和异常类)调试和异常类VC+交互编程基础交互编程基础应用程序体系结构类应用程序体系结构类1 1命令相关类:命令相关类:CCmdTargetCCmdTarget类类该类是该类是CObje

29、ctCObject的子类,它是的子类,它是MFCMFC库中所有具有消息映射属性的库中所有具有消息映射属性的基类。消息映射规定了当一对象接收到消息命令时,应调用哪基类。消息映射规定了当一对象接收到消息命令时,应调用哪一个函数对该消息进行处理一个函数对该消息进行处理2 2线程基类:线程基类:CWinThreadCWinThread类类所有线程的基类,可直接使用。所有线程的基类,可直接使用。CWinAppCWinApp类就是从类就是从CWinThreadCWinThread类中派生出来的类中派生出来的4 4文档文档/ /视类视类 文档对象由文档模板对象创建,管理应用程序的文档对象由文档模板对象创建,

30、管理应用程序的数据。视对象表示一个窗口的客户区,显示文档数据数据。视对象表示一个窗口的客户区,显示文档数据并允许用户与之交互并允许用户与之交互3 3窗口应用程序类:窗口应用程序类:CWinAppCWinApp类类 每个应用程序有且只有一个应用程序对象,在运每个应用程序有且只有一个应用程序对象,在运行程序中该对象与其它对象相互协调,该对象从行程序中该对象与其它对象相互协调,该对象从CWinAppCWinApp类中派生出来。类中派生出来。CWinAppCWinApp类封装了初始化、运类封装了初始化、运行、终止应用程序的代码。行、终止应用程序的代码。应用程序体系结构类应用程序体系结构类可视对象类可视

31、对象类2 2视类:视类:CViewCView类类该类表示框架窗口的客户区和显示文档数据并接收输入的客户该类表示框架窗口的客户区和显示文档数据并接收输入的客户区,其派生类主要有如下几种:区,其派生类主要有如下几种:lCScrollViewCScrollView:具有滚动功能的视的基类具有滚动功能的视的基类lCFormViewCFormView:其布局在对话资源中定义的滚动视其布局在对话资源中定义的滚动视lCEditViewCEditView:具有文本编辑、查找、替换和滚动功能的视具有文本编辑、查找、替换和滚动功能的视1 1窗口类:窗口类:CWndCWnd类类CWndCWnd提供了提供了MFCMF

32、C中所有窗中所有窗口类的基本功能,是口类的基本功能,是CCmdTargetCCmdTarget类的子类类的子类创建创建WindowsWindows窗口要分两窗口要分两步进行步进行引入构造函数,构引入构造函数,构造一个造一个CWndCWnd对象对象调用调用CreateCreate建立建立WindowsWindows窗窗口,并将它连到口,并将它连到CWndCWnd对象上对象上3 3菜单类:菜单类:CMenuCMenu类类该类是该类是CObjectCObject类的子类,用于管理菜单。它是一个类的子类,用于管理菜单。它是一个Windows Windows HMenuHMenu的封装,提供了与窗口有关

33、的菜单资源建立、修改、跟的封装,提供了与窗口有关的菜单资源建立、修改、跟踪及删除的成员函数。踪及删除的成员函数。4 4对话框类:对话框类:CDialogCDialog类类由于对话框是一个特殊的窗口,所以该类是从由于对话框是一个特殊的窗口,所以该类是从CWndCWnd类中派生出类中派生出来的。对话框子层次结构包括通用对话框类来的。对话框子层次结构包括通用对话框类CDialogCDialog以及支持以及支持文件选择、颜色选择、字体选择、打印、替换文本的公共对话文件选择、颜色选择、字体选择、打印、替换文本的公共对话框子类。框子类。可视对象类可视对象类5 5控件类控件类 控件子层次结构包括若干类,使用

34、这些类可建立静态文本、控件子层次结构包括若干类,使用这些类可建立静态文本、命令按钮、位图按钮、列表框、组合框、滚动条、编辑框等。命令按钮、位图按钮、列表框、组合框、滚动条、编辑框等。这些直观控件为这些直观控件为WindowsWindows应用程序提供了各种输入和显示界面。应用程序提供了各种输入和显示界面。6 6控件条类:控件条类:CControlBarCControlBar类类 控件条子层次结构为工具条、状态条、对话条和分割窗口控件条子层次结构为工具条、状态条、对话条和分割窗口建立模型。该类是建立模型。该类是CToolBarCToolBar、CStatusBarCStatusBar、CDial

35、ogBarCDialogBar的基类,的基类,负责管理工具条、状态条、对话条的一些成员函数。控件条指负责管理工具条、状态条、对话条的一些成员函数。控件条指的是连接在主窗口框架的顶部或底部的小窗口的是连接在主窗口框架的顶部或底部的小窗口可视对象类可视对象类7 7绘画对象类:绘画对象类:CGdiObjectCGdiObject类类图形绘画对象子层次结构以图形绘画对象子层次结构以CGdiObjectCGdiObject类为根类,可用于建类为根类,可用于建立绘画对象模型,如画笔、刷子、字体、位图、调色板等。立绘画对象模型,如画笔、刷子、字体、位图、调色板等。8 8设备描述表类:设备描述表类:CDCCD

36、C类类该类及其子类支持设备描述表对象,是该类及其子类支持设备描述表对象,是CObjectCObject类的子类。类的子类。CDCCDC类是一个较大的类,包括许多成员函数,如映射函数、类是一个较大的类,包括许多成员函数,如映射函数、绘画工具函数、区域函数等,通过绘画工具函数、区域函数等,通过CDCCDC对象的成员函数可以对象的成员函数可以完成所有的绘画工作完成所有的绘画工作可视对象类可视对象类VC+交互编程基础交互编程基础MFC中全局函数和全局变量中全局函数和全局变量AfxAbort: 无条件终止一个应用程序无条件终止一个应用程序AfxBeginThread: 创建一个新线程并执行它创建一个新线

37、程并执行它AfxEndThread: 终止当前正在执行的线程终止当前正在执行的线程AfxMessageBox: 显示一个显示一个Windows消息框消息框AfxGetApp: 返回当前应用程序对象的指返回当前应用程序对象的指针针AfxGetInstanceHandle:返回标识当前应用程序对象的返回标识当前应用程序对象的句柄句柄AfxRegisterWndClass: 注册用于创建注册用于创建Windows窗口的窗口的窗口类窗口类theApp 应用程序唯一的全局对象应用程序唯一的全局对象 应用程序向导应用程序向导应用程序向导应用程序向导应用程序向导应用程序向导应用程序向导应用程序向导应用程序向

38、导应用程序向导应用程序向导应用程序向导应用程序向导应用程序向导应用程序向导应用程序向导图形设备接口图形设备接口GDI Windows图形设备接口图形设备接口(GDI)是为)是为与与设备无关设备无关的图形设计的。所谓设备的无的图形设计的。所谓设备的无关性,就是操作系统屏蔽了硬件设备的差关性,就是操作系统屏蔽了硬件设备的差异,因而设备无关性能使用户编程时无需异,因而设备无关性能使用户编程时无需考虑特殊的硬件设置考虑特殊的硬件设置。GDI负责系统与用户或绘图程序之间负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上的信息交换,并控制在输出设备上显示图显示图形形或或文字文字。nGDIGDI的一

39、些概念的一些概念n绘图工具对象绘图工具对象n绘图函数绘图函数n文本的显示文本的显示图形设备接口图形设备接口GDInGDIGDI的一些概念的一些概念n绘图工具对象绘图工具对象n绘图函数绘图函数n文本和字体文本和字体图形设备接口图形设备接口GDIWindows系统系统外设外设直接访问直接访问不允许不允许统一的设备环境统一的设备环境(DC)提供提供使应用程序与设备相连使应用程序与设备相连用用户户GDI的一些概念的一些概念设备环境设备环境(上下文)(上下文)DCGDI的一些概念的一些概念CDC类类CDC类提供与绘图有关的所有操作类提供与绘图有关的所有操作函数,如:绘图工具对象的选择;绘图函数,如:绘图

40、工具对象的选择;绘图属性、映射模式、视口等的设置;提供属性、映射模式、视口等的设置;提供坐标转换、裁剪和绘制简单图形、显示坐标转换、裁剪和绘制简单图形、显示文本的函数等。文本的函数等。派生自派生自CDC类的还有类的还有CPaintDC、CClientDC、CWindowDC、CMetaFileDC。GDI的一些概念的一些概念CDC类类CreateDC、CreateCompatibleDC、DeleteDCAttach、DetachGetCurrentBrush、GetCurrentFont、GetCurrentPalette、GetCurrentPen、GetWindowSelectObjec

41、t、SelectStockObjectSelectPalette、RealizePaletteGetBkColor、SetBkColor、GetBkMode、SetBkMode、GetPolyFillMode、SetPolyFillMode、GetROP2、SetROP2、GetStretchBltMode、SetStretchBltMode、GetTextColor、SetTextColorGetMapMode、SetMapMode、GetViewportExt、SetViewportExt、GetWindowExt、SetWindowExtPatBlt、BitBlt、StretchBlt、

42、GetPixel、SetPixel图形刷新图形刷新图形刷新图形刷新是绘图过程中必须考虑的重要问题是绘图过程中必须考虑的重要问题刷新请求刷新请求对刷新请求的响应对刷新请求的响应刷新方法刷新方法包括(1) 刷新请求刷新请求 窗口大小的调整窗口大小的调整窗口移动窗口移动被覆盖后的恢复被覆盖后的恢复GDI的一些概念的一些概念GDI的一些概念的一些概念(2) 系统对刷新请求的响应系统对刷新请求的响应 当用户区的内容需要刷新时,系统向应用程序消当用户区的内容需要刷新时,系统向应用程序消息队列发送息队列发送WM_PAINT消息消息三种三种刷新刷新窗口移动后的刷新窗口移动后的刷新被覆盖区域的刷新被覆盖区域的刷

43、新对象穿越后的刷新对象穿越后的刷新(系统自动完成)用户区移动或显示用户区移动或显示用户窗口大小改变用户窗口大小改变程序通过滚动条滚动窗口程序通过滚动条滚动窗口窗口被另一个窗口覆盖的窗口被另一个窗口覆盖的恢复如下拉式菜单关闭等恢复如下拉式菜单关闭等光标穿过用户区光标穿过用户区图标拖过用户区图标拖过用户区窗口被另一个窗口覆盖的区域称为窗口被另一个窗口覆盖的区域称为无效区域无效区域。 Windows系统为每个窗口建立了一个系统为每个窗口建立了一个PAINTSTRUCT结构,结构,该结构中包含了该结构中包含了包围无效区域的一个最小矩形包围无效区域的一个最小矩形的结构的结构RECT,应用程序可以根据这个

44、无效矩形执行刷新操作。应用程序可以根据这个无效矩形执行刷新操作。 typedef struct typedef struct tagPAINTSTRUCTtagPAINTSTRUCT HDC HDC hdchdc; ; /设备环境句柄设备环境句柄 BOOL BOOL fErasefErase; /; /一般取真值,表示擦除无效矩形的背景一般取真值,表示擦除无效矩形的背景 RECT RECT rcPaintrcPaint; ;/无效矩形标识无效矩形标识 BOOL BOOL fRestorefRestore; ; / /系统保留系统保留 BOOL BOOL fIncUpdatefIncUpdate

45、; ;/系统保留系统保留 BYTE rgbReserved32BYTE rgbReserved32;/系统保留系统保留 PAINTSTRUCT;PAINTSTRUCT;GDI的一些概念的一些概念常用的常用的windows应用应用程序刷新窗口程序刷新窗口的方法的方法保存副本。刷新时将副本拷贝到保存副本。刷新时将副本拷贝到相应的窗口中。相应的窗口中。记录事件。刷新时重新执行这个记录事件。刷新时重新执行这个曾经发生的事件。曾经发生的事件。重新绘制。将图形绘制处理程序重新绘制。将图形绘制处理程序放在消息放在消息WM_PAINT响应模块中响应模块中,刷新时重绘图形。,刷新时重绘图形。(3) 有效的刷新方

46、法有效的刷新方法GDI的一些概念的一些概念激活刷新的激活刷新的MFC窗口类的函数窗口类的函数GDI的一些概念的一些概念BOOLInvalidateRect(LPCRECTlpRect,BOOLbErase =TRUE);BOOLInvalidate(BOOLbErase =TRUE);voidInvalidateRgn(HRGNhRgn,BOOLbErase =TRUE);获取设备环境获取设备环境DC的方法的方法 获取设备环境是应用程序输出图形的先决条件,常用的两种获取设备环境是应用程序输出图形的先决条件,常用的两种方法是调用函数方法是调用函数BeginPaint或或GetDC 1、应用程序响

47、应、应用程序响应WM_PAINT消息进行图形刷新时,主要消息进行图形刷新时,主要通过调用通过调用BeginPaint函数获取设备环境函数获取设备环境 hdchdc= =BeginPaint(hwnd,&psBeginPaint(hwnd,&ps) );/psps为为PAINTSTRUCTPAINTSTRUCT类型结构类型结构由由BeginPaintBeginPaint函数获取的设备环境要用函数获取的设备环境要用EndPaintEndPaint函数释放函数释放BOOL BOOL EndPaint(HWNDEndPaint(HWND hwnd, PAINTSTRUCT & hwnd, PAINTS

48、TRUCT &psps) )GDI的一些概念的一些概念 2、如果绘图工作并非由如果绘图工作并非由WM_PAINT消息驱动,则调用消息驱动,则调用GetDC函数获取设备环境或函数获取设备环境或CClientDC构造一构造一CDC对象对象。CWnd:GetDCCDC*GetDC();CDC*GetWindowDC();CClientDC(CWnd*pWnd);由由GetDC函数获取的设备环境必须用函数获取的设备环境必须用ReleaseDC函数释放。函数释放。GDI的一些概念的一些概念GDI的一些概念的一些概念BeginPaint 与与 GetDC的区别的区别项目项目 函数函数BeginPaint

49、函数函数GetDc 函数函数使用环境使用环境只用于图形刷新时获只用于图形刷新时获取设备环境取设备环境使用较为广泛使用较为广泛操作区域操作区域使用使用 BeginPaint函数函数获取设备环境后,操作获取设备环境后,操作区域为无效区域区域为无效区域使用使用 GetDC函数获函数获取设备环境后,操作取设备环境后,操作区域为整个用户区区域为整个用户区释放设备环释放设备环境所用函数境所用函数由由 EndPaint 函数释放函数释放由由 ReleaseDC 函数释函数释放放获取设备环境获取设备环境DC的方法的方法映像模式映像模式 映像模式定义了将逻辑单位转化为设备的度量单位映像模式定义了将逻辑单位转化为

50、设备的度量单位以及设备的以及设备的x方向和方向和y方向,程序员可在一个统一的逻方向,程序员可在一个统一的逻辑坐标系中操作而不必考虑输出设备的坐标系。辑坐标系中操作而不必考虑输出设备的坐标系。窗口窗口:对应逻辑坐标系上程序员设定的区域:对应逻辑坐标系上程序员设定的区域视口视口:对应实际输出设备上程序员设定的区域:对应实际输出设备上程序员设定的区域GDI的一些概念的一些概念GDI的一些概念的一些概念窗口窗口视区变换视区变换通常解决下面几个方面的问题:通常解决下面几个方面的问题:(1)窗口逻辑坐标与视区设备坐标之间的转换。)窗口逻辑坐标与视区设备坐标之间的转换。(2)用户坐标系到屏幕坐标系,坐标轴方

51、向可)用户坐标系到屏幕坐标系,坐标轴方向可能改变,还有坐标原点的映射问题;能改变,还有坐标原点的映射问题;(3)用户坐标系中窗口区的图形坐标转换到视)用户坐标系中窗口区的图形坐标转换到视图区上的坐标需要取整。图区上的坐标需要取整。(4)如果视图区水平分辨率和垂直分辨率不同,)如果视图区水平分辨率和垂直分辨率不同,为了保持图形不变形,还要进行比例变换。为了保持图形不变形,还要进行比例变换。缺省的映射模式缺省的映射模式将窗口中的对称将窗口中的对称图形映射到视口图形映射到视口时仍为对称图形时仍为对称图形按照窗口和视口按照窗口和视口的坐标比例进行的坐标比例进行映射映射GDI的一些概念的一些概念 应用程

52、序可获取设备环境的当前映像模式,并根应用程序可获取设备环境的当前映像模式,并根据需要设置映像模式。据需要设置映像模式。GDI的一些概念的一些概念CDC:GetMapModeCDC:SetMapModeintGetMapMode()const;virtualintSetMapMode(intnMapMode);图形设备接口图形设备接口GDInGDIGDI的一些概念的一些概念n绘图工具对象绘图工具对象n绘图函数绘图函数n文本的显示文本的显示CGdiObject绘图工具对象绘图工具对象1. 画笔画笔(CPen)画笔的创建画笔的创建CPen(intnPenStyle,intnWidth,COLORRE

53、FcrColor);CPen(intnPenStyle,intnWidth,constLOGBRUSH*pLogBrush,intnStyleCount=0,constDWORD*lpStyle=NULL);BOOLCreatePen(intnPenStyle,intnWidth,COLORREFcrColor);BOOLCreatePen(intnPenStyle,intnWidth,constLOGBRUSH*pLogBrush,intnStyleCount=0,constDWORD*lpStyle=NULL);画笔的操作画笔的操作创建画笔创建画笔将画笔选入设备环境将画笔选入设备环境删除画

54、笔删除画笔绘图工具对象绘图工具对象PS_DASHPS_DASHDOTPS_DASHDOTDOTPS_DOTPS_INSIDEFRAMEPS_NULLPS_SOLID创建画笔后,必须调用创建画笔后,必须调用SelectObject函数将其选入设备环境。函数将其选入设备环境。不再使用当前画笔时,需删除画笔,以免占内存不再使用当前画笔时,需删除画笔,以免占内存DeleteObjectDeleteObject(hP(hP););绘图工具对象绘图工具对象CPenpen(0,width,color);CPen*oldPen=pDC-SelectObject(&pen);绘图操作绘图操作pDC-Select

55、Object(oldPen);2.画刷画刷(CBrush)CBrush(COLORREFcrColor);CBrush(intnIndex,COLORREFcrColor);CBrush(CBitmap*pBitmap);BOOLCreateSolidBrush(COLORREFcrColor);BOOLCreateHatchBrush(intnIndex,COLORREFcrColor);BOOLCreateBrushIndirect(constLOGBRUSH*lpLogBrush);BOOLCreatePatternBrush(CBitmap*pBitmap);BOOLCreateDIB

56、PatternBrush(HGLOBALhPackedDIB,UINTnUsage);BOOLCreateDIBPatternBrush(constvoid*lpPackedDIB,UINTnUsage);BOOLCreateSysColorBrush(intnIndex);绘图工具对象绘图工具对象CBrush brush; brush.CreateSysColorBrush(COLOR_BTNFACE); / Select the brush into the device context. CBrush* pOldBrush = (CBrush*)pDC-SelectObject(&bru

57、sh); / Draw. CRect rect(50, 50, 150, 150); pDC-Rectangle(rect); / Reselect the original brush. pDC-SelectObject(pOldBrush);绘图工具对象绘图工具对象2.画刷画刷(CBrush)BOOL CreatePalette( LPLOGPALETTE lpLogPalette );BOOLCreateHalftonePalette(CDC*pDC);UINTGetPaletteEntries(UINTnStartIndex,UINTnNumEntries,LPPALETTEENTRY

58、lpPaletteColors)const;UINTSetPaletteEntries(UINTnStartIndex,UINTnNumEntries,LPPALETTEENTRYlpPaletteColors);绘图工具对象绘图工具对象3.调色板调色板(CPalette)typedef struct tagPALETTEENTRY BYTE peRed; BYTE peGreen; BYTE peBlue; BYTE peFlags; PALETTEENTRY;typedef struct tagLOGPALETTE WORD palVersion; WORD palNumEntries;

59、PALETTEENTRY palPalEntry1; LOGPALETTE;BOOLCreateRectRgn(intx1,inty1,intx2,inty2);BOOLCreateRectRgnIndirect(LPCRECTlpRect);BOOLCreateEllipticRgn(intx1,inty1,intx2,inty2);BOOLCreateEllipticRgnIndirect(LPCRECTlpRect);BOOLCreatePolygonRgn(LPPOINTlpPoints,intnCount,intnMode);BOOLCreatePolyPolygonRgn(LPPO

60、INTlpPoints,LPINTlpPolyCounts,intnCount,intnPolyFillMode);BOOLCreateRoundRectRgn(intx1,inty1,intx2,inty2,intx3,inty3);intCombineRgn(CRgn*pRgn1,CRgn*pRgn2,intnCombineMode);绘图工具对象绘图工具对象4.CRgn图形设备接口图形设备接口GDInGDIGDI的一些概念的一些概念n绘图工具对象绘图工具对象n绘图函数绘图函数n文本的显示文本的显示CDC的绘图函数:的绘图函数:CPointGetCurrentPosition()const

61、;CPointMoveTo(intx,inty);CPointMoveTo(POINTpoint);BOOLLineTo(intx,inty);BOOLLineTo(POINTpoint);BOOLArc(intx1,inty1,intx2,inty2,intx3,inty3,intx4,inty4);BOOLArc(LPCRECTlpRect,POINTptStart,POINTptEnd);绘图函数绘图函数(x1,y1)(x2,y2)(x3,y3)(x4,y4)所画曲线所画曲线CDC的绘图函数:的绘图函数:BOOLAngleArc(intx,inty,intnRadius,floatfSt

62、artAngle,floatfSweepAngle);BOOLLineTo(intx,inty);BOOLPolyline(LPPOINTlpPoints,intnCount);BOOLPolyPolyline(constPOINT*lpPoints,constDWORD*lpPolyPoints,intnCount);BOOLPolyBezier(constPOINT*lpPoints,intnCount);BOOLDrawIcon(intx,inty,HICONhIcon);voidDrawDragRect(LPCRECTlpRect,SIZEsize,LPCRECTlpRectLast,

63、SIZEsizeLast,CBrush*pBrush=NULL,CBrush*pBrushLast=NULL);voidDraw3dRect(LPCRECTlpRect,COLORREFclrTopLeft,COLORREFclrBottomRight);绘图函数绘图函数CDC的绘图函数:的绘图函数:BOOLChord(intx1,inty1,intx2,inty2,intx3,inty3,intx4,inty4);BOOLChord(LPCRECTlpRect,POINTptStart,POINTptEnd);BOOLPie(intx1,inty1,intx2,inty2,intx3,int

64、y3,intx4,inty4);BOOLPie(LPCRECTlpRect,POINTptStart,POINTptEnd);绘图函数绘图函数(x1,y1)(x2,y2)(x3,y3)(x4,y4)所填区域所填区域CDC的绘图函数:的绘图函数:BOOLEllipse(intx1,inty1,intx2,inty2);BOOLEllipse(LPCRECTlpRect);BOOLPolygon(LPPOINTlpPoints,intnCount);intSetPolyFillMode(intnPolyFillMode);BOOLPolyPolygon(LPPOINTlpPoints,LPINTl

65、pPolyCounts,intnCount);BOOLRectangle(intx1,inty1,intx2,inty2);BOOLRectangle(LPCRECTlpRect);voidDrawFocusRect(LPCRECTlpRect);BOOLRoundRect(intx1,inty1,intx2,inty2,intx3,inty3);BOOLRoundRect(LPCRECTlpRect,POINTpoint);绘图函数绘图函数图形设备接口图形设备接口GDInGDIGDI的一些概念的一些概念n绘图工具对象绘图工具对象n绘图函数绘图函数n文本和字体文本和字体文本和字体文本和字体 使

66、用定义好的与设备无关的字体集,使用定义好的与设备无关的字体集, Windows就能维护它的设备无关性,提供就能维护它的设备无关性,提供“所见所见即所得即所得”的好处,即屏幕所见与设备输出的文本的好处,即屏幕所见与设备输出的文本是一样的。是一样的。文本文本操作操作先要获得文本句柄先要获得文本句柄设置字体、字符大小、字符颜色等有关属性设置字体、字符大小、字符颜色等有关属性将这些属性选入设备环境将这些属性选入设备环境文本和字体文本和字体逻辑字体逻辑字体定义的字符集是定义的字符集是设备无关设备无关的,它可以精确标度,的,它可以精确标度,因此得到广泛应用因此得到广泛应用物理字体物理字体是为特殊设备设计的

67、,因而是是为特殊设备设计的,因而是设备相关设备相关的的字体字体 说明说明ANSI_FIXED ANSI标准的固定宽度的字体标准的固定宽度的字体ANSI_VAR ANSI标准的可变宽度的字体标准的可变宽度的字体DEFAULT_GUI当前当前GUI的缺省字体的缺省字体OEM_FIXED 由标准原设备制造商由标准原设备制造商(OEM)提供提供DEVICE_DEFAULT当前图形设备的字体当前图形设备的字体SYSTEM_FIXEDWindows的标准固定宽度的字体的标准固定宽度的字体SYSTEM Windows提供的可变宽度的字体提供的可变宽度的字体Windows系统提供了七种基本字体系统提供了七种基

68、本字体文本和字体文本和字体CFont类类BOOLCreateFontIndirect(constLOGFONT*lpLogFont);BOOLCreateFont(intnHeight,intnWidth,intnEscapement,intnOrientation,intnWeight,BYTEbItalic,BYTEbUnderline,BYTEcStrikeOut,BYTEnCharSet,BYTEnOutPrecision,BYTEnClipPrecision,BYTEnQuality,BYTEnPitchAndFamily,LPCTSTRlpszFacename);BOOLCreat

69、ePointFont(intnPointSize,LPCTSTRlpszFaceName,CDC*pDC=NULL);BOOLCreatePointFontIndirect(constLOGFONT*lpLogFont,CDC*pDC=NULL);文本和字体文本和字体typedefstructtagLOGFONTLONGlfHeight;LONGlfWidth;/字体高度、宽度字体高度、宽度LONGlfEscapement;LONGlfOrientation;/字体角度字体角度LONGlfWeight;/字体粗细度字体粗细度BYTElfItalic;/字体是否倾斜字体是否倾斜BYTElfUnd

70、erline;/字体是否有下划线字体是否有下划线BYTElfStrikeOut;/字体是否有中划线字体是否有中划线BYTElfCharSet;/字体所属字符集字体所属字符集BYTElfOutPrecision;BYTElfClipPrecision;BYTElfQuality;BYTElfPitchAndFamily;TCHARlfFaceNameLF_FACESIZE;/字体名字体名LOGFONT,*PLOGFONT;文本和字体文本和字体CFont类类CClientDC dc(this); CFont font;VERIFY(font.CreatePointFont(120, Arial,

71、&dc); CFont* def_font = dc.SelectObject(&font); dc.TextOut(5, 5, Hello, 5); dc.SelectObject(def_font); font.DeleteObject(); 文本和字体文本和字体设置字体和背景颜色(设置字体和背景颜色(CDC)virtualCOLORREFSetBkColor(COLORREFcrColor );intSetBkMode(intnBkMode);virtualCOLORREFSetTextColor(COLORREFcrColor);输出文字(输出文字(CDC)virtualBOOLTex

72、tOut(intx,inty,LPCTSTRlpszString,intnCount );BOOLTextOut(intx, inty, constCString&str );virtual int DrawText( LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat );intDrawText(constCString&str,LPRECTlpRect,UINTnFormat);GDI编程的几个问题编程的几个问题nCRgn类类n位图相关知识位图相关知识n映射模式与窗口映射模式与窗口-视口变换视口变换nMFC中的中的MVC模

73、式模式n编程实例解析编程实例解析CRgn类类CRgn类的主要方法:类的主要方法:1、创建各类多边形区域:、创建各类多边形区域:BOOLCreateRectRgn(intx1,inty1,intx2,inty2);BOOLCreateEllipticRgn(intx1,inty1,intx2,inty2);BOOLCreateRoundRectRgn(intx1,inty1,intx2,inty2,intx3,inty3);BOOLCreatePolygonRgn(LPPOINTlpPoints,intnCount,intnMode);BOOLCreatePolyPolygonRgn(LPPOI

74、NTlpPoints,LPINTlpPolyCounts,intnCount,intnPolyFillMode);BOOLCreateFromPath(CDC*pDC);BOOLCreateFromData(constXFORM*lpXForm,intnCount,constRGNDATA*pRgnData);CRgn类类CRgn类的主要方法:类的主要方法:2、用于多边形区域的交互拾取:、用于多边形区域的交互拾取:BOOLPtInRegion(intx,inty)const;BOOLRectInRegion(LPCRECTlpRect)const;CRgn类还用于类还用于CDC类类的裁剪操作:

75、的裁剪操作:intSelectClipRgn(CRgn*pRgn,intnMode);virtualBOOLPtVisible(intx,inty)const;virtualBOOLRectVisible(LPCRECTlpRect)const;virtualintOffsetClipRgn(intx,inty);intExcludeUpdateRgn(CWnd*pWnd);CRgn类类CRgn用于多边形区域的交互拾取例子用于多边形区域的交互拾取例子鼠标当前位置鼠标当前位置构造线段的选构造线段的选择矩形区域择矩形区域直线的交互拾取直线的交互拾取CRgn类类CRgn用于多边形区域的交互拾取例子用

76、于多边形区域的交互拾取例子椭圆的交互拾取实例代码椭圆的交互拾取实例代码BOOLCGDI_ExeDoc:GetEllipseAt(CRect&rect,CPointpoint)intnum=m_ellipseObj.GetSize();CRectrectObj;CRectrectT(point,CSize(1,1);for(inti=0;iCreateCompatibleBitmap(&dc, nBmpWidth, nBmpHeight);位图相关知识位图相关知识位图应用实例位图应用实例void C*View:OnDraw(CDC* pDC)CDC* pMemDC = new CDC;if (!

77、pMemDC-CreateCompatibleDC(pDC) return;CBitmap* pOldBmp = pMemDC-SelectObject(m_pMapBmp);if(m_bEnableUpDateClientWindow = TRUE)BeginWaitCursor();m_GMDataManage.GMF_ShowWorkSpace(pMemDC, rClient);EndWaitCursor();m_bEnableUpDateClientWindow = FALSE;pDC-BitBlt(0, 0, rClient.Width(), rClient.Height(), pM

78、emDC, 0, 0, SRCCOPY);pMemDC-SelectObject(pOldBmp);delete pMemDC;映射模式与窗口映射模式与窗口-视口变换视口变换窗口窗口-视口变换通常完成逻辑坐标系视口变换通常完成逻辑坐标系和设备坐标系之间的坐标变换,在和设备坐标系之间的坐标变换,在GIS软软件中通常是地理坐标系(或高斯直角坐标件中通常是地理坐标系(或高斯直角坐标系)与设备坐标系之间的变换。坐标变换系)与设备坐标系之间的变换。坐标变换与映射模式有着直接的关联。与映射模式有着直接的关联。映射模式与窗口映射模式与窗口-视口变换视口变换CDC类中关于坐标变换的函数:类中关于坐标变换的函数

79、:/设备坐标到逻辑坐标设备坐标到逻辑坐标voidDPtoLP(LPPOINTlpPoints,intnCount=1)const;voidDPtoLP(LPRECTlpRect)const;voidDPtoLP(LPSIZElpSize)const;/设备坐标到逻辑坐标设备坐标到逻辑坐标voidLPtoDP(LPPOINTlpPoints,intnCount=1)const;voidLPtoDP(LPRECTlpRect)const;voidLPtoDP(LPSIZElpSize)const;映射模式与窗口映射模式与窗口-视口变换视口变换CDC类中关于坐标变换的函数:类中关于坐标变换的函数:v

80、oidDPtoHIMETRIC(LPSIZElpSize)const;voidHIMETRICtoDP(LPSIZElpSize)const;voidLPToHIMETRIC(LPSIZElpSize)const;voidHIMETRICtoLP(LPSIZElpSize)const;/与映射模式和窗口、视口设置有关的主要函数与映射模式和窗口、视口设置有关的主要函数virtualintSetMapMode(intnMapMode);virtualCPointSetViewportOrg(intx,inty);virtualCSizeSetViewportExt(intcx,intcy);CPo

81、intSetWindowOrg(intx,inty);virtualCSizeSetWindowExt(intcx,intcy);映射模式与窗口映射模式与窗口-视口变换视口变换例程坐标变换实例例程坐标变换实例/设备坐标转换为逻辑坐标设备坐标转换为逻辑坐标,映射模式为映射模式为MM_TEXTvoidCGDI_ExeView:ClientToDoc(CPoint&point)CClientDCdc(this);OnPrepareDC(&dc,NULL);dc.DPtoLP(&point);映射模式与窗口映射模式与窗口-视口变换视口变换例程坐标变换实例例程坐标变换实例/逻辑坐标转换为设备坐标,注意不

82、同映射模式的转换结果不同逻辑坐标转换为设备坐标,注意不同映射模式的转换结果不同voidCGDI_ExeView:DocToClient(CPoint&point)CClientDCdc(this);OnPrepareDC(&dc,NULL);intoldMode=dc.SetMapMode(m_nMapMode);dc.LPtoDP(&point);dc.SetMapMode(oldMode);if(m_nMapMode!=MM_TEXT)point.y+=400;映射模式与窗口映射模式与窗口-视口变换视口变换GIS中坐标变换实例中坐标变换实例CPointDocToClient(GMS_3DP

83、OINT&dpoint)CPointpoint;point.x=(int)(dpoint.X*m_dScale+m_dDX);point.y=(int)(dpoint.Y*(-m_dScale)+m_dDY);returnpoint;映射模式与窗口映射模式与窗口-视口变换视口变换GIS中坐标变换实例中坐标变换实例GMS_3DPOINTClientToDoc(CPointpoint)GMS_3DPOINTdpoint;dpoint.X=(point.x-m_dDX)/m_dScale;dpoint.Y=(point.y-m_dDY)/(-m_dScale);dpoint.H=0.0;return

84、dpoint;MFC中的中的MVC模式模式nMVC模式模式MFC中的中的MVC模式模式nMVC模式模式MVCMVC(Model-View-ControllerModel-View-Controller)模式通常用)模式通常用)模式通常用)模式通常用在开发人机交互软件的时候,这类软件的最大特点就在开发人机交互软件的时候,这类软件的最大特点就在开发人机交互软件的时候,这类软件的最大特点就在开发人机交互软件的时候,这类软件的最大特点就是用户界面容易改变。是用户界面容易改变。是用户界面容易改变。是用户界面容易改变。在这种设计模式中,在这种设计模式中,在这种设计模式中,在这种设计模式中,模型模型模型模型

85、用来用来用来用来封装核心数据和功封装核心数据和功封装核心数据和功封装核心数据和功能能能能,它独立于特定的输出表示和输入行为,是执行某,它独立于特定的输出表示和输入行为,是执行某,它独立于特定的输出表示和输入行为,是执行某,它独立于特定的输出表示和输入行为,是执行某些任务的代码,至于这些任务以什么形式显示给用户,些任务的代码,至于这些任务以什么形式显示给用户,些任务的代码,至于这些任务以什么形式显示给用户,些任务的代码,至于这些任务以什么形式显示给用户,并不是模型所关注的问题。模型只有纯粹的功能性接并不是模型所关注的问题。模型只有纯粹的功能性接并不是模型所关注的问题。模型只有纯粹的功能性接并不是

86、模型所关注的问题。模型只有纯粹的功能性接口,也就是一系列的公开方法,这些方法有的是口,也就是一系列的公开方法,这些方法有的是口,也就是一系列的公开方法,这些方法有的是口,也就是一系列的公开方法,这些方法有的是取值取值取值取值方法方法方法方法,让系统其它部分可以得到模型的内部状态,有,让系统其它部分可以得到模型的内部状态,有,让系统其它部分可以得到模型的内部状态,有,让系统其它部分可以得到模型的内部状态,有的则是的则是的则是的则是置值方法置值方法置值方法置值方法,允许系统的其它部分修改模型的内,允许系统的其它部分修改模型的内,允许系统的其它部分修改模型的内,允许系统的其它部分修改模型的内部状态。

87、部状态。部状态。部状态。MFC中的中的MVC模式模式nMVC模式模式 视图视图视图视图用来向用户用来向用户用来向用户用来向用户显示信息显示信息显示信息显示信息,它获得来自模,它获得来自模,它获得来自模,它获得来自模型的数据,决定模型以什么样的方式展示给用型的数据,决定模型以什么样的方式展示给用型的数据,决定模型以什么样的方式展示给用型的数据,决定模型以什么样的方式展示给用户。户。户。户。同一个模型可以对应于多个视图同一个模型可以对应于多个视图同一个模型可以对应于多个视图同一个模型可以对应于多个视图,这样对,这样对,这样对,这样对于视图而言,模型就是可重用的代码。一般来于视图而言,模型就是可重用

88、的代码。一般来于视图而言,模型就是可重用的代码。一般来于视图而言,模型就是可重用的代码。一般来说,说,说,说,模型内部必须保留所有对应视图的相关信模型内部必须保留所有对应视图的相关信模型内部必须保留所有对应视图的相关信模型内部必须保留所有对应视图的相关信息息息息,以便在模型的状态发生改变时,可以通知,以便在模型的状态发生改变时,可以通知,以便在模型的状态发生改变时,可以通知,以便在模型的状态发生改变时,可以通知所有的视图进行更新。所有的视图进行更新。所有的视图进行更新。所有的视图进行更新。MFC中的中的MVC模式模式nMVC模式模式 控制器控制器控制器控制器是和视图联合使用的,它是和视图联合使

89、用的,它是和视图联合使用的,它是和视图联合使用的,它捕捉鼠标捕捉鼠标捕捉鼠标捕捉鼠标移动、鼠标点击和键盘输入等事件,将其转化移动、鼠标点击和键盘输入等事件,将其转化移动、鼠标点击和键盘输入等事件,将其转化移动、鼠标点击和键盘输入等事件,将其转化成服务请求成服务请求成服务请求成服务请求,然后再,然后再,然后再,然后再传给模型或者视图传给模型或者视图传给模型或者视图传给模型或者视图。整个。整个。整个。整个软件的用户是通过控制器来与系统交互的,他软件的用户是通过控制器来与系统交互的,他软件的用户是通过控制器来与系统交互的,他软件的用户是通过控制器来与系统交互的,他通过通过通过通过控制器控制器控制器控

90、制器来来来来操纵模型操纵模型操纵模型操纵模型,从而向模型传递数据,从而向模型传递数据,从而向模型传递数据,从而向模型传递数据,改变模型的状态改变模型的状态改变模型的状态改变模型的状态,并最后导致,并最后导致,并最后导致,并最后导致视图的更新视图的更新视图的更新视图的更新。MFC中的中的MVC模式模式nMFC中的中的MVC模式模式在在MFC编程框架中可以理解为:编程框架中可以理解为:CDocument类为类为Model,负责数据模型的,负责数据模型的管理和维护等操作。管理和维护等操作。CView类为类为View,负责数据和交互效果的,负责数据和交互效果的显示及与显示及与Controller的消息

91、交互。的消息交互。CFramWnd类和鼠标工具类都可理解为类和鼠标工具类都可理解为Controller,负责消息的分发与处理。,负责消息的分发与处理。编程实例解析编程实例解析public:/向数据集中追加新的数据的函数向数据集中追加新的数据的函数voidAddLine(CRectrect);/在数据集中删除相应目标在数据集中删除相应目标BOOLDeleteLine(CRectrect);/用于图形选择的函数,主要用了用于图形选择的函数,主要用了CRgn类的类的RectInRegion()方法方法BOOLGetLineAt(CRect&rect,CPointpoint,LOGPENlogpen)

92、;/画图形的函数画图形的函数voidDrawLines(CGDI_ExeView*pView,CDC*pDC);private:/存储图形数据的数据结构存储图形数据的数据结构CArraym_lineObj;CArraym_rectObj;CArraym_ellipseObj;CTypedPtrListm_polygonObj;CDocument类中添加的数据成员和操作方法类中添加的数据成员和操作方法编程实例解析编程实例解析CView类中添加的数据成员和方法类中添加的数据成员和方法public:/窗口窗口-视图坐标变换函数视图坐标变换函数voidClientToDoc(CPoint&point)

93、;voidClientToDoc(CRect&rect);voidDocToClient(CPoint&point);voidDocToClient(CRect&rect);/画被选中图形的选中句柄画被选中图形的选中句柄voidDrawSelectionObj();/图形属性对话框图形属性对话框Apply、OK按钮的消息处理按钮的消息处理voidOnApply();/无模式对话框无模式对话框CGraphPropertyDlg*pDlg;编程实例解析编程实例解析CView类中添加的数据成员和方法类中添加的数据成员和方法public:intm_nMapMode;/映射模式映射模式LOGBRUSHm

94、_lBrush;/用来交互设置用来交互设置CDC画刷属性的逻辑画刷画刷属性的逻辑画刷LOGPENm_lPen;/用来交互设置用来交互设置CDC画笔属性的逻辑画笔画笔属性的逻辑画笔COLORREFm_cFont;/用来交互设置用来交互设置CDC字体颜色字体颜色LOGFONTm_lFont;/用来交互设置用来交互设置CDC字体属性的逻辑字体字体属性的逻辑字体/用于单选操作的变量用于单选操作的变量BOOLm_bSelected;DrawShapem_selectType;CRectm_rectSelect;CDrawPolygonm_polygonSelect;编程实例解析编程实例解析CView类中

95、添加的数据成员和方法类中添加的数据成员和方法/重载鼠标消息调用鼠标工具的消息处理重载鼠标消息调用鼠标工具的消息处理voidCGDI_ExeView:OnLButtonDown(UINTnFlags,CPointpoint)CDrawTool*pTool=CDrawTool:FindTool(CDrawTool:c_drawShape);if(pTool!=NULL)pTool-OnLButtonDown(this,nFlags,point);voidCGDI_ExeView:OnButtonLine()CDrawTool:c_drawShape=line;编程实例解析编程实例解析鼠标工具类型鼠

96、标工具类型/图形绘制工具的枚举类型图形绘制工具的枚举类型enumDrawShapeselection,line,rectangle,ellipse,polygon;/鼠标工具选择类鼠标工具选择类classCSelectTool:publicCDrawTool/鼠标工具矩形类,用于画直线、矩形、椭圆等鼠标工具矩形类,用于画直线、矩形、椭圆等classCRectTool:publicCDrawTool/鼠标工具多边形类鼠标工具多边形类classCPolyTool:publicCDrawToolVC+语言重点学什么语言重点学什么(1)不要因为可视化编程工具而忽视不要因为可视化编程工具而忽视语言基础语言基础,重视数,重视数据结构、内存管理。据结构、内存管理。(2)尽快理解并能看懂尽快理解并能看懂例程例程(windows消息、消息、MFC类)类)(3)对各种对各种GUI控件控件的设计和应用要多动手的设计和应用要多动手(4)对对GDI的掌握与的掌握与图形交互图形交互(位图、各种绘图函数、(位图、各种绘图函数、映射模式)映射模式)(5)摆脱摆脱c的影响的影响(6)多交流,利用多交流,利用网上资源网上资源,不要害怕英文,不要害怕英文THE ENDTHANK YOU!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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