VisualC++程序设计--基础与实例分析ppt.ppt_第1页
VisualC++程序设计--基础与实例分析ppt.ppt_第2页
VisualC++程序设计--基础与实例分析ppt.ppt_第3页
VisualC++程序设计--基础与实例分析ppt.ppt_第4页
VisualC++程序设计--基础与实例分析ppt.ppt_第5页
已阅读5页,还剩306页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VisualC 程序设计 基础与实例分析 朱晴婷 2020 3 27 2 第一章VC开发环境 集成开发环境集成平台基本操作调试 2020 3 27 3 DeveloperStudio操作界面 标题栏菜单栏工具栏状态栏 项目工作区 ClassViewResourceViewFileView编辑区输出框 2020 3 27 4 图片 操作界面 项目工作区 编辑区 输出框 WizardBar 2020 3 27 5 项目工作区WorkSpace DeveloperStudio以项目工作区的方式来组织文件 项目 项目配置 创建项目工作区时 将创建 一个项目工作区目录一个项目工作区文件 dsw 一个项目文件 dsp 一个工作区选项文件 opt 要打开一个项目 只需要打开对应的项目工作区文件 dsw 2020 3 27 6 项目 一个项目是由一组项目配置和一组源文件组成 项目配置 Win32DeBugWin32ReleaseProject Setting 源文件HeaderFilesSourceFilesResourceFiles 2020 3 27 7 项目工作区窗口 ClassView 显示项目中定义的C 类ResourceView 显示项目中包含的资源FileView 显示包含在项目工作区中的文件 2020 3 27 8 ClassView 类成员变量成员函数访问类型publicprivateprotected 2020 3 27 9 RecourceView AcceleratorDialogIconMenuStringTableToolBarVersion 2020 3 27 10 FileView 查看文件增加文件Project AddtoProject Fles删除文件 文件操作是针对项目 并不能从物理上删除或增加一个文件 2020 3 27 11 File New FilesProjectWorkSpaceothersDocumentsMFCAppWizard EXE 创建一个MFC应用程序 AppWizardSingleDocumentMultipleDocumentDialogbased 工具按钮New只是新建一个文本文件 2020 3 27 12 类操作向导工具 ClassWizard 对话框View ClassWizardCtrl W快捷菜单WizardBar 工具栏 2020 3 27 13 ClassWizard的作用 支持从应用程序框架基类中派生新类为类添加消息映射函数查看和编辑消息处理函数创建新类时 自动加入方法和属性 2020 3 27 14 集成平台基本操作 打开应用程序关闭应用程序编译运行应用程序 2020 3 27 15 任务1 通过AppWizard 建立MFC应用程序框架详见实验1 2020 3 27 16 调试 调试命令设置断点使用Variables窗口使用Watch窗口 2020 3 27 17 调试命令 StartDebugGo F5 RuntoCursorStepIntoStepOverAttachtoProcessStopDebugging 2020 3 27 18 设置断点 Location设置位置中断Data根据表达式的值设置中断Message设置消息中断 2020 3 27 19 Variables窗口 AutoLocalsthis 2020 3 27 20 Watch窗口 变量表达式 2020 3 27 21 任务2 VisualC 集成开发环境下的程序调试详见例1 1 2020 3 27 22 联机帮助 Help菜单F1MSDN 2020 3 27 23 任务3 实验2实验3 第二章面向对象程序设计的概念 C与C 的差别引用类和对象构造函数和析构函数 2020 3 27 25 C 对C的改进 一般语法的改进指针和引用函数的改进 2020 3 27 26 C 的输入和输出 include stdio h printf helloc scanf d include iostream h cout sum cout sumis sum endl 一般语法的改进 2020 3 27 27 注释 一般语法的改进 2020 3 27 28 变量定义 变量定义可以位于程序中的任何地方 下面的语句有问题吗 for inti 0 i 10 i intc c 2 ints 一般语法的改进 2020 3 27 29 符号常量的定义 defineNULL0 defineLength100 definePI3 1415926constintNULL 0constintLength 100constdoublePI 3 1415926 一般语法的改进 2020 3 27 30 强制转换类型 C的强制类型转换法 类型名 表达式函数表示法 仅限简单类型 类型名 表达式 inti int 1 35 一般语法的改进 2020 3 27 31 结构体与枚举类型的用户标识名 enumtraffic red green yellow structstudent intnum charname 20 trafficLight studentstu1 不必在一个结构体名之前加struct 不用在一个枚举类型名之前加关键字enum 一般语法的改进 2020 3 27 32 动态内存分配 newint p q s p newint s newint 200 q newint 10 deletedeletep delete q 一般语法的改进 include iostream h voidmain int p p newint p 10 cout p deletep 2020 3 27 33 引用类型的概念 引用是指给对象的地址取个别名 对引用的改动则是对目标的改动 intint1 int引用不是值 不占有存储空间引用必须初始化 并且不再指向其他不同的变量 指针和引用 2020 3 27 34 什么能被引用 double 指针和引用 2020 3 27 35 什么不能被引用 void 指针和引用 2020 3 27 36 引用作为函数参数 地址传递 指针的代码可读性差 指针作为参数传递 用户调用知道函数是如何工作的 解决大对象值传递会产生副本的问题程序清单2 3 指针和引用 2020 3 27 37 引用作为函数参数 地址传递 存在的问题引用隐藏了函数所使用的参数传递的类型 应避免重载匹配错误voidfn ints voidfn int用const限定引用doublefn constdouble pd 指针和引用 2020 3 27 38 函数原型 例 intfunc int int C 要求所有函数都有函数原型程序的顶部头文件C 提供更强的类型检查 允许编译程序对下列情况报错误信息 被调用函数参数类型定义和类型转换非法函数的参数个数不相符函数不能返回预定的数据类型 函数的改进 2020 3 27 39 内置函数inline includevoidmain inta 8 b 16 c inlineintmax int int c max a b cout c c endl intmax intx inty cout c c endl 2020 3 27 40 内置函数inline 实质 编译器为inline函数创建代码 在每次碰到该函数的调用都用相应的一段代码替换说明 关键字inline一般放在函数声明的前面inline放在函数定义的前面时 函数定义要在调用函数的前面限制 不能含有switch while等复杂的结构控制语句 递归函数不能被用作inline函数 函数的改进 2020 3 27 41 inline与宏定义 宏所作的是机械代换 在参数为表达式时会产生不可预知的错误宏不能作类型检查 definef m m m宏定义调用 f 5 5 5 5 5 5 函数的改进 2020 3 27 42 函数的默认参数 可以在函数声明时 对参数赋与默认值 调用没有给出实参时 就使用默认值 voiddelay intloops 1000 voiddelay intloops if loops 0 return for inti 0 i loops i delay delay 5000 函数的改进 2020 3 27 43 默认参数的使用说明 默认参数只能在函数声明中提供若一个函数有多个默认参数 则在形参分布中从右到左逐个定义 在调用函数时 自左向右逐分配实参 默认值可以是全局变量 常量 甚至一个函数 但不能是局部变量 分析下面语句的正确性 voidfunc inta 1 intb intc 3 intd 4 voidfunc inta intb 2 intc 3 intd 4 func 10 15 20 30 func func 12 12 func 2 15 20 函数的改进 2020 3 27 44 重载函数 函数具有相同的名字 但有不同的参数 完成不同的操作intabs inti longabs longg doubleabs doubled 函数的改进 2020 3 27 45 重载函数说明 重载函数至少在参数的个数 参数的类型 或参数的顺序上有所不同不能用typedef的类型名区分重载函数中的参数typedefintLength voidfunc int voidfunc Length 让重载函数执行不同的功能 是不好的编程风格 函数的改进 2020 3 27 46 避免二义性编译错误 voidprint long voidprint double 调用 voidfunc inta print a 函数的改进 2020 3 27 47 类和对象 类 由用户定义的 将一组具有相关性的数据和操作封装在一起的抽象数据类型 数据称为数据成员 操作称为成员函数 对象 用类定义的变量 2020 3 27 48 类和对象 类的定义对象的定义构造函数和析构函数this指针 2020 3 27 49 类的定义 class类名 private 私有段数据及函数protected 保护段数据及函数public 公有段数据及函数 省略时默认为private 成员访问类型 2020 3 27 50 Point类的设计 classPoint intx inty public voidset x intk x k voidset y intk y k intget x returnx intget y returny 2020 3 27 51 成员函数的类型 构造函数析构函数普通成员函数虚函数注 除析构函数不能重载外 其他成员函数都是可以重载的 2020 3 27 52 成员函数的实现 在类定义时实现在类定义的外面实现intPoint get x returnx 2020 3 27 53 对象的定义 对象的定义Pointp1 Point p Pointpa 100 Point parray 100 2020 3 27 54 公有成员的使用 从类外访问公有段的数据成员或成员函数对象名 公有段数据成员对象名 公有段成员函数 实参表 类名 公有段数据成员类名 公有段成员函数 实参表 例p1 xp1 yp1 set x 20 x p1 get x p xp ypa i xpa i y 2020 3 27 55 任务1 类和对象的定义详见实验1 2020 3 27 56 构造函数 构造函数的作用是构造对象初始化形式在定义对象时 由应用程序自动调用构造函数是类的一个特殊成员函数它的函数名与类名相同 没有返回类型它可以有任意类型的参数可以重载 2020 3 27 57 默认构造函数 当类定义中没有用户定义的构造函数时 系统自动产生一个无参数的构造函数 称此构造函数为默认构造函数当定义一个对象时 默认构造函数只是简单地把对象中的每个成员初始化为0或空 2020 3 27 58 构造函数的类型 无参构造函数Point Pointp1 带参构造函数Point int int Pointp2 100 200 复制构造函数Point constPoint 2020 3 27 59 拷贝构造函数示例 classA public A int A constA 2020 3 27 60 析构函数 析构函数也是类的特殊成员函数 它的函数名与类名相同 但它的名字前面有一个 它没有参数 没有返回类型 而且不能重载 2020 3 27 61 this指针 this是一个指向调用该函数的对象的常量指针 成员函数可通过this指针直接使用同类的其它成员this指针是隐含的intget length returnlength intget length returnthis length 2020 3 27 62 继承 在已有类的基础上定义新类的过程称为继承 基类 baseclass 和派生类派生类的定义class 2020 3 27 63 继承的方式 2020 3 27 64 例2 22单继承示例 2020 3 27 65 多继承 派生类从多个基类派生 派生类具有多个基类的特性派生方法 class派生类名 继承方式1基类名1 继承方式2基类名2 继承方式n基类名n 2020 3 27 66 例2 23多继承示例 2020 3 27 67 多态性 在基类和派生类中使用同样的函数名而定义不同的操作 从而实现 一种接口 多种方法 类型静态多态性 编译时实现 通过重载动态多态性 运行时实现 通过派生和虚函数 2020 3 27 68 虚函数 在继承体系中 如果在派生类中要对所继承的成员函数重新定义其功能 该函数应在基类中被定义为虚函数 虚函数是指在基类中的成员函数前加上virtual 然后在派生类中再加以定义的函数 当用指向派生类的对象的基类指针对函数进行访问时 系统将根据运行时指针所指向的实际对象来确定调用哪一个类的成员函数版本 2020 3 27 69 例2 25虚函数示例 第三章MFC应用程序概述 Windows应用程序概述MFC应用程序框架文档 视图结构消息映射 2020 3 27 71 窗口编程基础 窗口消息和消息队列事件驱动的程序设计资源管理 2020 3 27 72 窗口的界面元素 2020 3 27 73 窗口 窗口是应用程序与用户交互的界面窗口元素以对象方式组织一个应用程序由多个窗口组成程序运行过程是窗口之间 窗口与系统 窗口与用户之间交换并处理数据的过程 2020 3 27 74 消息和消息队列 消息用于通知某个事件的产生消息机制MSG消息的类型 2020 3 27 75 消息机制 2020 3 27 76 派送消息 消息源1 消息源2 消息源n 否 捕获消息 处理消息 是否退出消息 是 2020 3 27 77 MSG typedefstructtagMSG HWNDhwnd UINTmessage WPARAMwParam LPARAMlParam DWORDtime POINTpt MSG 2020 3 27 78 消息的类型 输入消息控件消息系统消息用户消息 2020 3 27 79 事件驱动的程序设计 事件驱动的程序的逻辑顺序是按事件的产生而决定的事件的产生不是预先定义的 有着随机性 2020 3 27 80 2020 3 27 81 资源管理 资源的类型用户自定义资源菜单对话框工具栏系统资源设备上下文画刷画笔字体通信端口 资源管理器资源ID资源模板资源文件资源编译程序资源数据结构 2020 3 27 82 窗口应用程序剖析 窗口应用程序的构成一个应用程序是如何开始的 2020 3 27 83 窗口应用程序的构成元素 代码winmainwindowsprocedure用户界面资源库模块DLL 2020 3 27 84 一个应用程序是如何开始 操作系统创建一个新的进程和一个初始线程应用程序代码装载到内存动态链接库装载到内存 如果需要使用DLL 为数据和堆栈分配物理内存 并映射到虚拟内存应用程序开始执行 2020 3 27 85 窗口应用程序组成 TheWinMainfunctionAwindowprocedurefunctionmessageloop 消息循环 例3 1 2020 3 27 86 TheWinMainFunction 在操作系统注册窗口类 在内存中创建窗口 并初始化它的属性 使窗口正确显示 创建一个消息循环 检查窗口是否产生消息进入消息队列当消息循环检测到关闭窗口消息WM QUIT时 终止程序运行 2020 3 27 87 TheWindowProcedure 用户自定义函数决定窗口在客户区显示的内容 和窗口对用户输入如何反应处理开发者添加的消息处理代码 如果不存在开发者添加的消息处理代码 将由defaultwindowprocedure函数处理 2020 3 27 88 消息循环 while GetMessage 2020 3 27 89 任务1 分析使用AppWizard生成的Win32窗口程序示例Exam3 2 并修改该程序 详见例3 2 2020 3 27 90 MFC应用程序概述 MFC类简介构建Windows应用程序的基本类文档 视图结构剖析MFCSDI的文件结构 2020 3 27 91 MFC类 applicationprogramminginterface API MFC封装了API的主要结构和通用组件 2020 3 27 92 MFC的特点 创建窗口方便 利用程序的应用程序框架新的C 的类与早期版本的MFC兼容大量可重用的C 源代码与VisualC 集成 2020 3 27 93 MFC的特点 支持灵活快速的DAO或ODBC数据库访问方式支持ActiveX和Internet技术支持先进的数据绑定技术支持窗口消息API支持多线程 2020 3 27 94 MFC的继承关系 MFC类封装了thewin32API应用程序对象如 documents viewsandapplictionsActivex database Internet特点MFC分类CObject derived类Non CObject derived类 2020 3 27 95 CObject派生类 2020 3 27 96 非CObject派生类 通用工具类CStringCTimeCTimeSpanCRectCpointCSize MFC支持类CArchiveCDumpContextCRuntimeClassCFileStatusCMemoryStateCTypePointerArray 2020 3 27 97 构建Windows应用程序基本类 应用程序类主框架类 2020 3 27 98 应用程序类CExam1 1App 类定义头文件一个空的类结构类的实现文件应用程序类的消息映射空的构造函数全局对象theAppInitInstance函数定义 2020 3 27 99 InitInstance 创建应用程序的主窗口一个指向有效主窗口的指针m pMainWnd 2020 3 27 100 主框架类CMainFrame 管理除视图之外的其他主窗口部分OnCreatem wndToolBarm wndStatusBar 2020 3 27 101 任务2 手工编写MFC应用程序详见实验1 2020 3 27 102 文档 视图和应用程序框架 文档 视图结构SDI和MDI应用程序在SDI应用程序中的对象非文档 视图结构 2020 3 27 103 文档 视图结构 文档 adataobjectwithwhichtheuserinteractsinaneditingsession视图awindowobjectthroughwhichtheuserinteractswiththedocument 2020 3 27 104 文档 视图应用程序的构成 2020 3 27 105 文档 视图结构 传递消息到窗口框架 传递消息到视图 信息在视图与文档对象间双向传递 2020 3 27 106 文档类 装载 存贮 管理应用程序的数据每一个文档对象维护一张与视图相关联的列表 每一个视图对象维护与其相关联的指针 主要成员函数OnOpenDocumentOnNewDocumentSerialize 2020 3 27 107 视图类 显示保存在文档类中的信息 允许用户输入主要成员函数GetDocumentOnDrawOnInitialUpdateOnUpdate 2020 3 27 108 视图类的类型 CScrollViewCFormViewCEditViewCRichEditViewCListViewCTreeViewCRecordViewCCtrlView 2020 3 27 109 文档模板类 绑定框架 视图 文档和一组应用程序资源的类不需要开发者干涉其行为 所以不存在对应的文件CDocTemplateCSingleDocTemplateCMultiDocTemplate 2020 3 27 110 文档模板类层次图 2020 3 27 111 SDI和MDI应用程序 SDI只能打开一个文档窗口画图MDI可以打开多个文档窗口Excel 2020 3 27 112 定义单文档的文档模板类型 CSingleDocTemplate pDocTemplate pDocTemplate newCSingleDocTemplate IDR MAINFRAME RUNTIME CLASS CExam1 1Doc RUNTIME CLASS CMainFrame RUNTIME CLASS CExam1 1View AddDocTemplate pDocTemplate 2020 3 27 113 SDI应用程序组成 ApplicationObject DocumentTemplate Document Toolbar View StatusBar MainFrameWindow 2020 3 27 114 MFCSDI的文件结构 工作区文件 项目文件Exam1 1 dswExam1 1 dspExam1 1 clw应用程序源文件和头文件 资源文件Exam1 1RCRESOURCE HExam1 1 rc2预编译头文件StdAfx cppStdAfx h 2020 3 27 115 消息映射 消息的类别及描述消息映射系统消息处理的路径自定义消息处理 2020 3 27 116 消息的类别 窗口消息CView和CFrame及其派生类 及自定义窗口类处理窗口消息 命令消息从基类CCmdTarget派生的类都能处理命令消息控件消息控件消息由控件所属的对话框类处理 2020 3 27 117 窗口消息的描述 message WM XXXwParam和lParam 随WM XXX而变 2020 3 27 118 命令消息的描述 message WM COMMANDwParam 低16位为命令ID 高16位为0lParam 0L 2020 3 27 119 控件消息的描述 message WM NOTIFYwParam 控件IDlParam 指向NMHDR的指针 NMHDR是包含了消息内容的一个结构 2020 3 27 120 消息宏前缀 2020 3 27 121 消息映射系统 CCmdTarget的派生类每个子类都定义一个消息表消息映射表DECLARE MESSAGE MAP BEGIN MESSAGE MAP END MESSAGE MAP 2020 3 27 122 MFC消息映射原理 应用程序开始运行后有一个从CWinApp派生的对象 等待和处理消息的函数是应用程序类的RUN 函数 RUN 函数将接收到的消息都交给主窗口的窗口函数OnWndMsg 由OnWndMsg 函数负责将消息分类并交予不同的消息处理函数去处理 2020 3 27 123 消息映射表 MFC在每一个能够接收和处理消息类中 定义一个消息和消息处理函数静态对照表 该表称为消息映射表 该类能够处理的所有的消息及其对应的消息处理函数的地址都列在该表中 2020 3 27 124 在类中加入静态消息映射表 在 h文件中加入 DECLARE MESSAGE MAP 在 CPP文件中加入 BEGIN MESSAGE MAP CMainFrame CFrameWnd ON WM PAINT END MESSAGE MAp 2020 3 27 125 消息映射表示例 BEGIN MESSAGE MAP CExam1 1App CWinApp AFX MSG MAP CExam1 1App ON COMMAND ID APP ABOUT OnAppAbout AFX MSG MAPON COMMAND ID FILE NEW CWinApp OnFileNew ON COMMAND ID FILE OPEN CWinApp OnFileOpen ON COMMAND ID FILE PRINT SETUP CWinApp OnFilePrintSetup END MESSAGE MAP 2020 3 27 126 消息处理宏格式 2020 3 27 127 例3 3 创建一个单文档的MFC应用程序Exam3 3 并实现功能 当在视图中双击鼠标右键时 弹出对话框 显示鼠标的坐标 2020 3 27 128 消息处理路径 窗口消息的处理命令消息的处理控件消息的处理 2020 3 27 129 如何处理窗口消息 所有基类均没定义该消息的处理函数 2020 3 27 130 窗口消息的处理 OnWndMsg 搜索窗口类的消息映射表 如果找到了匹配的消息处理函数 就执行消息处理函数如果找不到 继续搜索该窗口类的基类 如果找到了匹配的消息处理函数 就执行消息处理函数 如果还没有找到 则把消息交给默认窗口函数DefWindowProc 处理 2020 3 27 131 如何处理命令消息 从理论上讲 所有从基类CCmdTarget类派生的类均可处理命令消息 MFC应用程序框架将依次检查基本类的消息映射表 视图类 文档类 文档模板类 框架窗口类 应用程序类 界面变灰 2020 3 27 132 命令消息的处理 OnWndMsg 函数会将命令消息分发给窗口类的OnCommand 函数OnCommand 函数调用成员函数OnCmdMsg 函数 该函数依次搜索视图类 文档类 文档模板类 框架窗口类和应用程序类及其基类中的消息映射表 搜索到消息处理函数 搜索到消息处理函数则执行消息处理函数如果全部查找完毕 依然不能处理 则该命令消息所对应的界面元素变灰 2020 3 27 133 如何处理控件消息 2020 3 27 134 控件消息的处理 把消息交给控件所属的类 如果能够处理 执行消息处理函数如果控件所属的类不能处理 调用控件的父窗口对应类的OnCmdMsg 搜索父窗口对应类的消息映射表 以获得处理该消息的函数 2020 3 27 135 自定义窗口消息的方法 自定义静态窗口消息通过指定窗口消息对应的整数值来获得自定义窗口消息自定义动态窗口消息通过定义一个字符串名称来定义一个窗口消息 2020 3 27 136 自定义静态窗口消息 首先在为类实现文件中定义消息 defineWM MYMESSAGEWM USER 100在类中声明消息处理函数Afx msgLRESULTOnMyMessage WPARAMwParam LPARAMlParam 在类的消息映射表中加入映射项ON MESSAGE WM MYMESSAGE OnMyMessage 在类上实现消息处理函数使用SendMessage函数或PostMessage发送消息pView SendMessage WM MYMESSAGE 0L 0L 2020 3 27 137 自定义动态窗口消息 首先定义并注册消息 defineMESSAGE NAME 2001 8 1 THIS IS A MESSAGE TEST UINTWM MYMESSAGE RegisterWndMessage MESSAGE NAME 在类中声明消息处理函数在类的消息映射表中加入映射项在类实现文件中实现消息处理函数使用SendMessage函数或PostMessage函数发送消息 2020 3 27 138 任务3 实验3实验4 第四章资源和资源编辑器 资源符号和资源编辑器菜单的使用工具栏的使用状态栏的使用 2020 3 27 140 资源 加速键 Accelerator 位图 Bitmap 光标 Cursor 对话框 Dialog 图标 Icon 菜单 Menu 字符串表 StringTable 工具栏 Toolbar 版本信息 VersionInformation 2020 3 27 141 资源符号 View ResourceSymbol 2020 3 27 142 资源编辑器的公共操作 查看资源使用资源模板导入和导出资源查看和编辑属性页 2020 3 27 143 创建新资源 Insert Resource 2020 3 27 144 保存和删除资源 ResourceView File SaveAllDelete键直接删除 2020 3 27 145 菜单编辑器的使用 创建标准菜单和命令创建弹出命令设置快捷键 加速键和菜单命令项的状态栏消息移动菜单命令 2020 3 27 146 加速键编辑器的使用 增加 删除 改变和浏览加速键列表浏览并改变加速键表资源ID将一个加速键与一个菜单命令相联系 2020 3 27 147 工具栏编辑器的使用 创建工具栏和按钮将位图转化为工具栏资源创建 移动和编辑工具栏按钮 2020 3 27 148 版本信息编辑器的使用 文本框的编辑 2020 3 27 149 字符串编辑器的使用 查找 增加 删除一个字符串移动一个字符串到另一个段移动一个字符串到另一个资源文件 rc 改变一个字符串或它的ID增加格式或特殊字符到一个字符串 2020 3 27 150 图形编辑器 绘制位图 图标 鼠标绘制工具栏位图 2020 3 27 151 任务1 文本编辑器的使用详见例4 1 2020 3 27 152 菜单的类型 顶层菜单 top levelmenu 弹出菜单 pop upmenu 下拉菜单 Drop downmenu 子菜单 Submenu 快捷菜单 Shortcutmenu 2020 3 27 153 菜单编辑器的操作 插入菜单项插入分割线增加子菜单删除菜单项调整菜单项位置属性对话框的填写IDCaptionPrompt 2020 3 27 154 菜单消息命令的处理 WM COMMANDClassWizard 2020 3 27 155 更新菜单命令的处理 UPDATE COMMAND UICCmdUI类及成员函数EnableSetCheckSetRadioSetText 用户在选择有些菜单命令时 希望看到选择留下的痕迹 2020 3 27 156 任务2 更新菜单项举例详见例4 2 2020 3 27 157 任务3 使用快捷菜单增加一个快捷菜单快捷菜单命令项命令处理函数详见例4 3 使用ComponentGallery增加一个快捷菜单 2020 3 27 158 任务4 在对话框应用程序中添加菜单栏详见实验3 2020 3 27 159 工具栏和状态栏 CToolBarCStatusBarCMainFrame OnCreate 2020 3 27 160 默认工具栏源代码剖析 定义工具栏成员变量CToolBarm wndToolBar创建工具栏窗口加载工具栏资源设置工具栏停靠特性设置框架窗口停靠特性把工具栏停靠在框架窗口的具体位置 2020 3 27 161 自定义工具栏的创建 创建一个工具栏资源定义一个CToolBar的对象调用CToolBar Create创建工具栏窗口调用CToolBar LoadToolBar装载工具栏资源例4 4 2020 3 27 162 任务5 生成两个自定义的工具栏详见实验1 2020 3 27 163 默认状态栏源代码剖析 定义状态栏成员变量CStatusBarm wndStatusBar窗格数组CStatusBar Create创建状态栏窗口CStatusBar SetIndicator设置窗格 2020 3 27 164 修改状态栏的窗格 删除一个窗格移动一个窗格添加一个窗格创建一个dummymenu菜单资源标识窗格在Indicator数组中增加窗格资源创建窗格ID的命令更新处理程序 2020 3 27 165 任务6 在状态栏添加时间显示详见例4 5 第5章图形和文本输出 图形设备接口CGdiObject对象CDC文本处理绘图处理 2020 3 27 167 图形设备接口GDI graphicsdeviceinterface 矢量图形创建线和填充图形光栅图形位图文本输出以逻辑坐标为单位计算文本输出位置 2020 3 27 168 绘图工具GDI对象 GdiObject CGdiObject是一个抽象类 该类不能直接定义对象 必须使用它的派生类 2020 3 27 169 设备上下文DCdevicecontext GDI创建用来代表设备连接的数据结构主要功能 允许应用程序使用一个输出设备提供窗口应用程序 设备驱动 和输出设备之间的连接保存当前信息 例如在一个窗口内绘图使用的颜色 画笔的宽度 画刷的类型等等保存窗口剪取区域 clippingregion 限制程序输出到输出设备中窗口覆盖的区域 2020 3 27 170 设备上下文类 CDC 2020 3 27 171 OnDraw函数 voidCMyView OnDraw CDC pDC CMyDoc pDoc GetDocument ASSERT VALID pDoc TODO adddrawcodefornativedataherepDC TextOut 1 1 helloworld 2020 3 27 172 WM PAINT消息 产生WM PAINT消息的场合通常有窗口移动后及最大化 最小化后的刷新 被覆盖区域的刷新 如下拉菜单覆盖的区域 无效区域产生后的刷新 如执行滚动条操作 将一区域移动至不可见 2020 3 27 173 WM PAINT消息 人为地生成一个绘制消息 重绘窗口的方法 Invalidate true CRectrect 1 1 300 300 InvalidateRect 2020 3 27 174 获取设备上下文的方法 接受一个参数为指向CDC对象的指针voidCMyView OnDraw CDC pDC 构造CClientDC对象CClientDCdc this 2020 3 27 175 接受一个参数为指向CDC对象的指针 voidCMyView OnDraw CDC pDC CMyDoc pDoc GetDocument ASSERT VALID pDoc TODO adddrawcodefornativedatahere 在坐标为10 10的位置上画一点 颜色黑色pDC SetPixel CPoint 10 10 RGB 0 0 0 参数为指向CDC对象的指针 2020 3 27 176 构造CClientDC对象 构造CClientDC对象 VoidCMyView OnLButtonDown UNITnFlags CPointpoint TODO adddrawcodefornativedatahereCClientDCdc this this指针将CMyView赋值给创建的dc对象dc SetPixel point RGB 255 0 0 CView OnLButtonDown nFlags point 2020 3 27 177 任务1 编写一个单文档MFC EXE 程序 在视图类增加成员变量 追踪鼠标的左键双击位置的坐标 并输出详见例5 1 2020 3 27 178 处理文本 设置文本颜色设置文本显示属性设置字体格式化文本文本输出函数 图形和文本并没有明显的界限 2020 3 27 179 设置文本颜色 COLORREFSetTextColor COLORREFcrColor COLORREFSetBkColor COLORREFcrColor 2020 3 27 180 颜色的表示 2020 3 27 181 基本三元色COLORREFcrRed RGB 255 0 0 COLORREFcrGreen RGB 0 255 0 COLORREFcrBlue RGB 0 0 255 16 color设备支持颜色constCOLORREFg crBlack RGB 0 0 0 constCOLORREFg crYellow RGB 255 255 0 constCOLORREFg crDkYellow RGB 128 128 0 constCOLORREFg crRed RGB 255 0 0 constCOLORREFg crDkRed RGB 128 0 0 constCOLORREFg crMagenta RGB 255 0 255 constCOLORREFg crDkMagenta RGB 128 0 128 constCOLORREFg crBlue RGB 0 0 255 constCOLORREFg crDkBlue RGB 0 0 128 2020 3 27 182 voidCMyView OnDraw CDC pDC CMyDoc pDoc GetDocument ASSERT VALID pDoc pDC SetTextColor RGB 255 0 0 pDC SetBkColor RGB 0 0 0 CStringstr str Format 鼠标左键双击的位置是 d d m LPoint x m LPoint y pDC TextOut 0 0 str 2020 3 27 183 设置文本显示属性 2020 3 27 184 设置字体 定义CFont对象调用CreateFont函数创建字体将创建的字体对象选入DC 并保存前一个被选入DC的字体对象 2020 3 27 185 voidCMyView OnDraw CDC pDC CMyDoc pDoc GetDocument ASSERT VALID pDoc CFontNewFont NewFont CreateFont 65 65 0 0 FW DONTCARE true false false DEFAULT CHARSET OUT CHARACTER PRECIS CLIP CHARACTER PRECIS DEFAULT QUALITY DEFAULT PITCH FF DONTCARE 黑体 CFont pOldFont pOldFont pDC SelectObject 2020 3 27 186 格式化文本 文本测量函数GetTextExtent获取字符串高度和宽度GetTextMetrics获取Textmetric类型数据 包含具体的字体测量信息 2020 3 27 187 2020 3 27 188 文本输出函数 2020 3 27 189 任务2 阅读单文档MFC EXE 程序EXAM5 2中处理文本显示的OnDraw函数 请分析每一行的文本串作了哪些文本属性设置 格式设置和字体设置 详见例5 2 2020 3 27 190 分析结果 2020 3 27 191 任务1 文本处理详见实验1 2020 3 27 192 处理绘图 简单的图形输出库存对象设置绘图坐标系创建和使用自定义画笔和画刷 2020 3 27 193 点 pDC SetPixel CPoint 200 200 RGB 255 0 0 在 200 200 的位置画一个红点 2020 3 27 194 线 pDC MoveTo 0 0 在视图的左上角一个XpDC LineTo 100 100 pDC MoveTo 0 100 pDC LineTo 100 0 2020 3 27 195 矩形 CRectrect 0 0 100 100 画一个长100 宽100的矩形pDC Rectangle 2020 3 27 196 圆和椭圆 CRectrect 0 0 100 100 在矩形内画圆pDC Ellipse 2020 3 27 197 多边形 CPointpoly 4 画一个平行四边形poly 0 CPoint 0 0 poly 1 CPoint 50 50 poly 2 CPoint 50 100 poly 3 CPoint 0 50 pDC Polygon poly 4 2020 3 27 198 其它图形 CDC Pie画饼图CDC Chord画弦CDC FillRect用指定颜色填充矩形且不画边线CDC Draw3DRect用于绘制名种3D边框CDC RoundRect画圆角矩形 2020 3 27 199 库存对象 库存对象是由操作系统维护的用于绘制屏幕的常用对象包括库存画笔 画刷 字体等使用SelectStockObject可以方便直接选择库存对象 修改系统默认值 2020 3 27 200 程序清单5 12 voidCExam5View OnDraw CDC pDC CExam5Doc pDoc GetDocument ASSERT VALID pDoc TODO adddrawcodefornativedatahereCRectrect rect SetRect CPoint 0 0 CPoint 200 200 pDC SelectStockObject WHITE PEN 选用白色画笔pDC SelectStockObject GRAY BRUSH 选用灰色画刷pDC Rectangle rect pDC MoveTo 0 0 pDC LineTo 200 200 pDC MoveTo 0 200 pDC LineTo 200 0 2020 3 27 201 设置绘图坐标系 如果要把一幅大小为400mm 800mm的图画在500像素 200像素的windows窗口中 我们把前者称为逻辑坐标 后者称为设备坐标 像素 厘米 毫米 英寸 原点 2020 3 27 202 映像模式 MM TEXT默认的映像模式 原点在左上角 向右x增加 向下y增加固定比例的映射模式向右x增加 向下y减少可变比例的映射模式允许改变比例因子和原点 在用户改变窗口大小时 绘制的内容会随之改变 如果改变一个轴的比例 则所绘的图像也会在其它轴上相应的改变 2020 3 27 203 修改映射模式 CClientDCdc intOldMode dc SetMapMode MM LOMETRIC 2020 3 27 204 移动逻辑坐标系的原点 CRectrect GetClientRect rect pDC SetViewportOrg rect width 2 rect height 2 2020 3 27 205 使用逻辑坐标和设备坐标的场合 MFC的CDC绘图函数都使用逻辑坐标为参数CWnd的成员函数一般使用设备坐标为参数返回鼠标位置作为屏幕位置测试时 一般使用设备坐标 2020 3 27 206 设备坐标系统分类 工作区

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论