第7章 单文档应用程序
第7章 单文档应用程序
7.1.2 Doc类
文档/视图的功能很强大,但也很复杂, MFC框架在后台完成了大量工作,若仅 通过AppWizard自动生成的一些代码,是 无法了解文档/视图如何实现的,有必要 阅读MFC源代码,简要的了解工作流程, 对于自身能力的提升非常有帮助。 注:MFC框架的源代码是公开的,MFC 的函数功能及调用流程,在源代码中得 到完全体现,若不确定某个函数的内部 实现,可打开源代码,找到函数定义处, 阅读后便可柳暗花明。源代码路径
7.4.1 设置分区
【范例7-5】新建一个单文档工程名为 Sdi064,在状态栏同步显示鼠标坐标位 置和颜色信息。
7.4.2 更新内容
在程序运行时,可动态更新状态栏窗格 显示的文本,用于显示各种提示信息, 如当前鼠标位置、当前位置的颜色信息 等。SetPaneText函数设置窗格显示的文 本,格式如下: BOOL CStatusBar::SetPaneText(int nIndex,LPCTSTR lpszNewText,BOOL bUpdate=TRUE) 参数: nIndex:要更新的窗格的位置索引。 lpszNewText:新文本值。
7.1.3 View类
ASSERT断言宏用于判断其参数表达式 是否为真,如ASSERT(1==0); 会弹出一 个错误窗口,并退出程序。类似的断言 宏VERIFY具有同样的功能,区别在于 ASSERT宏只能在Debug模式下可用,在 Release版本中失效,而VERIFY宏在 Release版本仍然被执行,但不会中断程 序。 #ifndef和#endif是预编译指令,用于预编 译判断,根据条件决定要编译哪些语句, #ifndef判断是否没有定义某个宏,即if no
7.3.1 添加工具栏资源
【范例7-4】新建一个单文档工程名为 Sdi063,添加一个工具栏,实现鼠标交 互式绘点、绘线功能。
Word基础与应用第7章课件
7.1.3 编辑模板
要对模板进行编辑修改,可在Word程序中打开 “打开”对话框,选择模板保存的位置,如在左侧的列 表中选择“受信任模板”,打开“Templates”文件夹, 再选择要修改的模板,如“我的教材模板”,然后单击
“打开”按钮将其打开,其编辑修改方法与编辑普通文 档相同。
7.2 上机实践——制作菜谱模板
钮,在展开的列表中选择“查看宏”项,在打开的 “宏”对话框中选择要删除的宏,然后单击“删除” 按钮,打开提示对话框,单击“是”按钮,即可将 所选宏删除。
7.4 上机实践——录制“格式宏”
下面我们来录制一个文字格式为:汉仪太极简 体,二号,绿色,突出显示颜色为黄色,居中对齐 的“格式宏”,并将其指定到键盘,然后运行该宏, 以此来熟悉一下宏的录制与运行操作,具体操作步 骤见视频7-3。
下面我们 通过制作一个菜 谱模板,熟悉一 下模板的创建过 程,具体操作步 骤见视频7-1。
7.3 使用宏
宏是将一系列Word命令和指令组合在一起, 形成一个单独的命令,以实现任务执行的自动化。 简单地说,就是批处理,使用一个简单的操作, 比如一次鼠标的单击,就可以完成多项任务,十 分方便。
如果要在Word中重复执行某项任务,可以将 其中的操作创建为宏,为其指定快捷方式,然后 运行该宏即可。Word提供两种方法来创建宏:利 用宏录制器和Visual Basic编辑器。
7.1.1 创建自己的模板
下面我们制作一个书稿文档的模板,该模板 中包括了对纸张大小,页边距,首页、奇偶页页眉 和页脚等内容的设置:新建一文档,然后在“页面 设置”对话框中分别设置纸张大小 、页边距和页 眉页脚的版式,为文档添加页眉和页脚及页码,最 后将其另存为Word模板,名称为“我的教材模 板”。
常用工具软件实用教程 第7章
• • •
•
•
2.保存Adobe PDF文档
• 可以保存Adobe PDF文档的副本,在文档的创建者启用了附加的使用 权限时还可以保存添加的注释、在表单域中输入的内容或添加的数字 签名。 • 在安装完整版Adobe Reader 之后,且PDF文档创建者许可的话,还 可以将 PDF 文档的内容另存为文本格式。使用本功能可方便地重新 使用 PDF 文档的文本。 • 保存Adobe PDF文档的副本:单击“文件”→“保存副本”菜单,在 打开的“保存副本”对话框中输入文件名并指定位置,然后单击“保 存”按钮。 • 保存注释、表单域内容以及数字签名:单击“文件”→“保存”菜单 将更改保存到当前文件,或者单击“文件”→“另存为”菜单将更改 保存到新文件。 • 注:在浏览器中查看包含了附加使用权限的文档时,只能使用“保存 副本”命令。 • 将 Adobe PDF 文档另存为文本文件:单击“文件”→“另存为文 本”,在打开的“另存为文本”对话框中输入文件名并指定位置,然 后单击“保存”按钮。此时文件将使用 .txt 作为扩展名保存。
图7-5 “搜索”对话框
图7-5 “搜索”对话框
图7-6是在“AutoCAD2008上机指导”PDF包中输入“对象捕捉”进行搜 索的情况,结果显示在3个文档中找到38处包含文字“对象捕捉”
图7-6 打开PDF包
7.如何创建Adobe PDF文档
无法使用Adobe Reader创建 Adobe PDF 文 档。必须使用 Adobe Acrobat 或允许创建 PDF 文档的其他应用程序(例如 Adobe InDesign® 或 Adobe FrameMaker®)。或 者在连上因特网之后,选择“文 件”→“在线创建 Adobe PDF”命令,然后 按照 Adobe 官方网站上的说明来使用在线 创建 PDF 文档的预定服务。有关在线创建 PDF 文档的详细信息,请访问 Adobe 官方 网站()。
单文档应用程序设计7
设置控件属性
ID属性 Caption(标题)属性
Visible属性
Disable属性
Tab键移动顺序
Tabstop属性
Group属性
第10章 单文档应用程序设计
10.9.2 对话框模板资源设计
设置控件属性
ID属性 Caption(标题)属性
Visible属性
Disable属性
Group属性
第10章 单文档应用程序设计
10.9.2 对话框模板资源设计
设置控件属性
控件的标识符
ID属性 Caption(标题)属性
Visible属性
Disable属性
Tabstop属性
Group属性
第10章 单文档应用程序设计
10.9.2 对话框模板资源设计
设置控件属性
添加成员变量
利用ClassWizard创建添加成员变量。
对话框的主要功能是输出和输入数据,因此,需要有一 组成员变量来存储数据。在对话框中,控件用来表示或输入
数据,因此,存储数据的成员变量应该与控件相对应。
第10章 单文档应用程序设计
10.9.3 对话框类设计
添加成员变量
利用ClassWizard创建添加成员变量。
第10章 单文档应用程序设计
10.9 概念 一种用户界面,用于输出/输入信息。 对话框
与控件是密不可分的,依靠这些控件 与用户进行交互。
第10章 单文档应用程序设计
10.9 主要内容
对话框
基本概念 对话框模板资源设计 对话框类设计 非模态对话框 标签式对话框 公用对话框
文档管理软件的操作步骤详解
文档管理软件的操作步骤详解第一章:介绍文档管理软件文档管理软件是一种用于组织、存储和检索文件的工具,它可以帮助用户有效地管理和利用文件资源。
接下来,本文将详细介绍文档管理软件的操作步骤。
第二章:安装和启动文档管理软件首先,下载并安装文档管理软件到相应的电脑或服务器上。
然后,点击软件图标或通过命令行启动软件。
第三章:创建新的仓库在软件主界面中,点击“新建仓库”按钮,填写仓库的名称、位置和描述等信息。
然后,点击“确定”按钮即可创建一个新的仓库。
第四章:导入文件将需要管理的文件拖拽到仓库界面,或点击“导入”按钮选择文件所在的文件夹。
软件会自动扫描该文件夹中的文件,并将其导入到仓库中。
第五章:设置文件属性在导入文件后,可以根据需要设置文件的属性,如文件类型、标签、关键字等。
这些属性将有助于后续的检索和分类。
第六章:编辑文件选择需要编辑的文件,点击“编辑”按钮进入编辑模式。
根据需要,可以修改文件的内容、格式和样式等。
第七章:版本控制文档管理软件通常支持版本控制功能,可以帮助用户跟踪文件的修改记录。
在编辑文件后,点击“保存”按钮即可生成一个新的版本。
第八章:权限管理为了保护文件的安全性,在文档管理软件中可以设置不同用户的权限。
管理员可以授权用户对文件的访问、编辑和删除等操作。
第九章:搜索和检索文档管理软件提供了强大的搜索和检索功能,可以根据文件名、属性、内容和关键字等信息进行快速查找。
用户只需输入相应的搜索条件,软件会自动匹配并显示符合条件的文件。
第十章:文件共享和协作文档管理软件支持文件的共享和协作,可以方便地与他人共享文件,并实时协同编辑。
用户只需将文件分享给其他用户,他们便可通过软件进行编辑和留言。
第十一章:备份和恢复为了防止文件丢失或损坏,文档管理软件通常提供了备份和恢复功能。
用户可以定期备份仓库中的文件,并在需要时进行恢复。
第十二章:导出和打印在需要将文件导出到外部存储介质或打印出来时,文档管理软件可以帮助用户实现这些功能。
第7章 菜单、工具栏和状态栏
菜单项的事件: 菜单项的事件:Click
7
本章目录
一些常用的快捷键及其含义:
<Ctrl+N> ——创建新文件。 <Ctrl+O> ——打开一个已有的文件。 <Ctrl+S> ——保存当前文件。 <Ctrl+Z> ——取消。 <Ctrl+X> ——剪切。 <Ctrl+C> ——复制。 <Ctrl+V> ——粘贴。 <Alt+F4> ——关闭窗口。
16
案例分析: 案例分析:状态栏的使用
为记事本创建一个状态栏,包含两个ToolStripStatusLabel 为记事本创建一个状态栏,包含两个ToolStripStatusLabel 要求启动窗体时显示系统日期
stslblTime.Text ="当前日期:"+ DateTime.Now.ToShortDateString(); 当前日期: 当前日期
13
2.工具栏各项属性和事件
(1)工具栏各按钮 如ToolStripButton1)属性 工具栏各按钮(如 工具栏各按钮 属性 Image:指定按钮上的图片 指定按钮上的图片 Text:显示在工具按钮上的文本 显示在工具按钮上的文本 DisplayStyle:获取或设置工具按钮是否显示文本和图像 获取或设置工具按钮是否显示文本和图像 Checked:确定是否按下工具按钮。 确定是否按下工具按钮。 确定是否按下工具按钮 CheckOnClick:指定工具按钮是否自动显示按下或未按下 指定工具按钮是否自动显示按下或未按下 状态。 状态。 ToolTipText:指定工具提示的文本 指定工具提示的文本 (2)事件: )事件: Click事件 事件 CheckChanged事件:Check属性发生变化时发生 事件: 事件 属性发生变化时发生
办公自动化技术(Windows7 Office2016)第3版 第7章 常用办公工具软件的使用
扫描木马
7.5.2 查杀木马
21
利用计算机程序的漏洞侵入系统并窃取计算机中资料的程序称为木马,其具有隐藏性和自发性等特点, 难以通过明显现象发觉,因此需要使用软件进行检测并查杀,保障办公文件的安全。
处理危险项
7.5.3 修复系统漏洞
22
系统漏洞是指应用软件或操作系统中的缺陷或错误,他人可能会通过在其中植入病毒或木马,窃取计 算机中的重要资料,甚至破坏系统。使用360安全卫士的漏洞修复功能可扫描并修复计算机中的漏洞。
高等教育立体化精品系列规划教材
第7章 常用办公工具软件的使用
办公自动化技术 (Windows 7+Office 2016)
(第3版)
内容导航
7.1 安装与卸载软件 7.1.1 获取软件安装程序 7.1.2 安装软件 7.1.3 卸载软件
7.2 使用压缩软件 7.3 使用Adobe Acrobat 7.4 使用美图秀秀处理图片 7.5 使用安全防护软件 7.6 项目实训 7.7 课后练习
美化图片
编辑文本
内容导航
7.1 安装与卸载软件 7.2 使用压缩软件 7.3 使用Adobe Acrobat 7.4 使用美图秀秀处理图片 7.5 使用安全防护软件
7.5.1 清理系统垃圾 7.5.2 查杀木马 7.5.3 修复系统漏洞 7.6 项目实训 7.7 课后练习
18
7.5.1 清理系统垃圾
9
7.3.1 查看PDF文档
10
前面介绍了将PPT演示文稿转换为PDF文件的方法,方便在办公中传递和审阅文件,如果要查看PDF 文档,就需要使用Adobe Acrobat软件。
选择“打开”命令
选择文件
7.3.1 查看PDF文档
计算机应用基础(win7+office2010)课件 第七章 常用工具软件简介
7.4 Foxmail
7.4.1 Foxmail的安装与配置 7.4.2 使用Foxmail查看及收发邮件 7.4.3 帐号管理
7.4.1 Foxmail的安装与配置
Foxmail是一款免费软件,用户可以从其官网或360软件管家 中下载并安装。安装过程与大多数软件是一样的,此处不 再赘述。
输入邮箱地址
【实例1】 假设需要下载一款用于背单词的软件,但不知道软件的具
体名称。其操作步骤如下
导入词库
“懒人背单词”运行界面
【实例2】 升级“酷我音乐盒”。其操作步骤如下:
【实例3】 卸载“酷我音乐盒”。其操作步骤如下
7.3.2 360杀毒软件
在使用计算机的过程中,病毒防护工作是至关重要的。 “360杀毒”是全球第一款永久免费的杀毒软件。
7.1.3 高级操作
【实例1】 对“C:\ 测试题目”文件夹进行分包压缩,每个数据包大小不超过 2MB,并对压缩文件进行加密。其操作步骤如下:
压缩文件“常规”选项卡
压缩文件“高级”选项卡
(3)此时WinRAR开始按用户所设定的参数进行压缩
【实例2】 对“C:\ excel数据”文件夹制作自解压的压缩文件,并且其 解压位置为F:\。其操作步骤如下:
05 单文档应用程序
80第5章 单文档应用程序本章将详细介绍如何开发单文档应用程序。
单文档应用程序是最简单、最重要的文档/视图结构的应用程序。
本章主要涉及的内容包括:如何利用MFC创建单文档应用程序;CDocument类在单文档应用程序中的作用;详细介绍文档类的函数InitInstance();视图类的使用;如何在单文档应用程序中使用控件5.1 利用MFC创建单文档程序本节详细介绍如何创建一个单文档应用程序。
下面详细介绍。
(1)启动Visual C++ 6.0,单击【File】|【New】命令,弹出新建对话框,如图5.1所示。
图5.1 创建新工程(2)选择【MFC AppWizard(exe)】选项,在【Project name】文本框中输入项目的名称,如SDI_ActiveX。
单击【OK】按钮,弹出如图5.2所示对话框。
(3)选择【Single Document】选项,单击【Finish】按钮,弹出如图5.3所示的对话框。
·81·图5.2 创建单文档应用程序图5.3 新创建项目的信息(4)单击【OK】按钮,进入Visual C++6.0 Developer Studio界面,如图5.4所示。
图5.4 创建新项目结束后的界面(5)编译运行。
运行界面如图5.5所示。
·82·图5.5 单文档应用程序运行的效果图5.2 CDocument类在 5.1节创建的单文档应用程序SDI_ActiveX包含5个类:CAboutDlg、CMainFrame、CSDI_ActiveXApp、CSDI_ActiveXDoc和CSDI_ActiveXView。
本节重点讲述由CDocument类派生的CSDI_ActiveXDoc类。
5.2.1 在程序中声明一个文档类当使用MFC创建应用程序时,AppWizard创建单个文档类。
在5.1节创建的项目中,这个文档类是CSDI_ActiveXDoc。
在文件SDI_ActiveXDoc.h中,包含了这个类的声明,见13行代码。
MFC的课后练习——包含MFC基础代码编程,肯定对你有一定的帮助
第一章 Windows应用程序基础知识1-2 什么是Windows API函数?答:用来开发Windows SDK应用程序的软件开发工具包是用C语言编写的一个大型函数库,这个库中的函数叫做API函数。
1-5 什么是事件?试举例说明。
答:能触发程序做出相应反应的因素或动作叫做“事件”。
例如,在键盘上按下了一个键、鼠标的单击或双击、应用程序窗口的显示和销毁等。
1-7 什么是消息循环?答:在创建了窗口的应用程序中,应用程序将不断地从消息队列中获取消息,并将消息指派给指定的窗口处理函数来处理,然后再回来从消息队列获取消息,这个不断重复的工作过程叫做消息循环。
1-9说明Windows应用程序的主函数、窗口函数与Windows系统之间的关系。
答:Windows应用程序的主函数和窗口函数都是系统调用的函数,主函数是在应用程序启动时由系统首先调用的函数,而窗口函数是主函数在消息循环中获得消息并把消息派送给系统之后,由系统调用的用来处理消息的函数。
第二章 Windows应用程序的类封装2-1 在窗体类CframeWnd中需要封装哪些成员?答:在窗体类CframeWnd中要封装窗口句柄、窗口类的定义、注册窗口类、创建窗口、显示更新窗口。
2-3 在MFC程序设计中,如果要建立拥有自己风格的主窗口,应该重写什么函数。
答:继承CWinAPP类并需要重写该类的成员函数InitInstaance。
2-4什么是消息映射表?答:在Windows SDK应用程序的窗口函数中,是采用switch-case分支结构实现消息处理的,这种方式不适合面向对象设计的要求。
因此MFC建立了一套自己的消息映射机制——消息映射表。
从外观来看,这种表有些类似学校中使用的学生名册,学号相当于消息号,学生姓名就相当于消息处理函数名,学号和学生号一一对应(映射)。
而MFC把实现表的代码用宏封装起来了。
第三章 MFC应用程序框架3-3简述构成文档/视图结构应用程序框架的四个MFC派生类,并说出它们的功能。
创建一个单文档应用程序
// … 其他绘图函数 pDC->SelectObject( pOldPen ); pDC->SelectObject( pOldBrush); } // 恢复设备环境中原来的画笔 // 恢复设备环境中原来的画笔
例2 各种图形绘制
void CEx_SDIHelloView::OnDraw(CDC* pDC) { CEx_SDIHelloDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CPen pen; // 定义一个画笔变量 pen.CreatePen( PS_SOLID, 2, RGB(255,0,0)); // 创建红色画笔 // 将此画笔选入当前设备环境并保存原来的画笔 CPen* pOldPen = pDC->SelectObject( &pen);// 用此画笔绘制直线 pDC->MoveTo(100,100); pDC->LineTo(700,400); CBrush brush; // 定义一个画刷变量 brush.CreateSolidBrush(RGB(0,255,0));// 创建绿色画刷 CBrush* pOldBrush =pDC->SelectObject(&brush); pDC->Rectangle(200,200,500,500);//画矩形 画矩形 pDC->Ellipse(600,200,700,500);//画椭圆 画椭圆
单文档应用程序
单文档多文档1.CMainFrame类是MFC的CFrameWnd类的派生类,它主要负责创建标题栏、菜单栏、工具栏和状态栏。
AssertValid 诊断CMainFrame对象是否有效,调试用。
Dump 输出CMainFrame对象的状态信息,调试用。
Oncreate 创建工具栏和状态栏。
视图窗口是由基类Cframewnd的成员函数oncreate通过调用oncreateclient函数创建。
2. Doc文档是MFC的cdocument类的派生类,他主要负责应用程序数据的保存和装载,实现文档的序列化功能。
OnNewDocument 当用户执行File菜单中New命令时,MFC应用程序框架会调用此函数来完成新建文档的工作。
Serialize 负责文档数据的磁盘读写操作。
注意:由于单文档应用程序只处理一个文档对象,当执行New命令时,文档对象已经生成,因此文档类的构造函数不会再调用,所以不会在构造函数中进行文档对象成员变量的初始化,而应在OnNewDocument函数中。
在重载时首先需要调用基类CDocument的OnNewDocument函数。
3.View视图是负责客户区文档数据的显示,以及如何进行人机交互(从CDocument派生的类接受信息并向用户显示,同时用户的输入信息通过它向由CDocument派生的类传递)。
GetDoument 用于获取当前文档对象的指针OnDraw 虚函数,扶着文档对象的数据在用户视图区的显示输出。
4.WinMain函数5.Mfc应用程序运行机制调用CWinApp的构造函数-》程序入口函数winmain接受控制-》WinMain函数调用应用程序类的InitInstance函数-》WinMain函数今天消息循环-》程序终止。
VFP7
7.2.3 为顶层表单添加菜单 SDI菜单指用于单文档界面窗口中的菜单。 菜单指用于单文档界面窗口中的菜单。 菜单指用于单文档界面窗口中的菜单 创建SDI菜单的方法与普通菜单一样, 菜单的方法与普通菜单一样, 创建 菜单的方法与普通菜单一样 但必须指明应用于SDI表单。 表单。 但必须指明应用于 表单 在打开菜单设计器后, 显示” 在打开菜单设计器后,在“显示”菜单中选 常规选项” 在弹出的“常规选项” 择“常规选项”,在弹出的“常规选项”对 话框中选中“顶层表单” 话框中选中“顶层表单”。
3、为菜单项分组 、 在子菜单中,可以加分隔线, 在子菜单中,可以加分隔线,将菜单项 分组 方法: 方法: 在菜单名称栏中键入: 在菜单名称栏中键入: \-
4、指定菜单项的键盘快捷键 、 访问键—( )( )(\<F) 访问键 (F)( ) 快捷键—可以在不显示菜单的情况下选择 快捷键 可以在不显示菜单的情况下选择 菜单项,一般用Ctrl键与另一个键的组 菜单项,一般用 键与另一个键的组 方法: 合。方法: 选择菜单项 选择“选项”栏的按钮,显示“ 选择“选项”栏的按钮,显示“提示信 息”对话框
四、调试与运行菜单程序 1、预览菜单 、 菜单设计器” 单击“预览”按钮, 在“菜单设计器”中,单击“预览”按钮, 已设计好的菜单即出现在VFP主窗口的菜 已设计好的菜单即出现在 主窗口的菜 单栏区域。 单栏区域。 注意:在预览菜单时, 注意:在预览菜单时,菜单项的功能不能执 行。
2、生成和执行菜单 、 用“菜单设计器”设计的菜单保存为.mnx文 菜单设计器”设计的菜单保存为 文 不能直接运行,必须先生成.mpr文件: 文件: 件,不能直接运行,必须先生成 文件 菜单”菜单中选“生成” 在“菜单”菜单中选“生成” 生成菜单” 在“生成菜单”对话框中指定输出菜单文 件名,单击“生成” 件名,单击“生成”按钮 命令”窗口中用DO 命令执行 在“命令”窗口中用
办公软件入门指南
办公软件入门指南第一章:办公软件的概述办公软件是指在进行办公工作时,为了提高工作效率和质量而使用的计算机软件。
随着信息化时代的到来,办公软件已经成为了现代办公不可或缺的工具。
常见的办公软件包括文字处理软件、电子表格软件、演示软件和数据库软件等。
第二章:文字处理软件的使用文字处理软件是常见的办公软件之一,它主要用于处理和编辑文本。
使用文字处理软件,可以进行文本的输入、编辑、格式调整和打印等操作。
常见的文字处理软件有微软的Office、谷歌的Docs和国产的WPS等。
这些软件功能强大,可以满足不同层次的办公需求。
第三章:电子表格软件的应用电子表格软件是用于管理和处理数据的工具。
它通过表格的形式,使得数据更加直观、易于对比和分析。
常见的电子表格软件有微软的Excel、谷歌的Sheets和国产的Kingsoft表格等。
使用电子表格软件,可以进行数据的输入、计算、整理和图表制作等操作,对于数据分析和决策提供了有力的支持。
第四章:演示软件的制作技巧演示软件是用于制作和展示幻灯片的工具。
它可以将文字、图片、音频和视频等多种媒体元素有机地结合在一起,形成生动、直观的展示效果。
常见的演示软件有微软的PowerPoint、谷歌的Slides和国产的WPS演示等。
在制作演示文稿时,应注意布局的合理性、字体的选择和颜色的搭配,以及要注意时间控制和语言表达的技巧。
第五章:数据库软件的应用原理数据库软件是用于管理和存储大量相关数据的工具。
它通过建立数据表、字段和记录等,使得数据的管理更加规范和高效。
常见的数据库软件有微软的Access、谷歌的Cloud SQL和国产的金山数据库等。
对于需要大量数据存储和查询的工作,使用数据库软件可以提高工作效率和数据的安全性。
第六章:办公软件的协同办公功能办公软件还具备协同办公的功能,使得多人共同协作成为可能。
通过办公软件的共享和编辑功能,多个人可以同时对同一个文件进行编辑和修改,大大提高了协作效率。
单文档应用程序设计2
AfxThrowResourceException();
CMenu *pPopupMenu=ContextMenu.GetSubMenu(0); ASSERT(pPopupMenu!=NULL); ClientToScreen(&point); pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x,point.y,this); CView::OnRButtonDown(nFlags, point); }
第10章 单文档应用程序设计
10.4.3 上下文菜单
单击鼠标右击时激活的菜单,称为上下文菜单
加入上下文菜单,一般分三步进行:
编辑菜单资源,设置菜单属性(包括菜单Caption和ID) 使用ClassWizard,映射鼠标右键消息 在鼠标右键消息映射函数中利用Cmenu类创建上下文菜单
第10章 单文档应用程序设计
第10章 单文档应用程序设计
10.4.3 上下文菜单 实例代码
void CMenuView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default CMenu ContextMenu; if(!ContextMenu.LoadMenu(IDR_CONTEXTMENU))
AfxThrowResourceException();
CMenu *pPopupMenu=ContextMenu.GetSubMenu(0); ASSERT(pPopupMenu!=NULL); ClientToScreen(&point); pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x,point.y,this); CView::OnRButtonDown(nFlags, point); }
第7章 单文档和多文档
图7.2 MFC AppWizard – Step 1对话框图
• (3)选择Single document单选按钮。单击What language would you like
your resourses in?下拉列表框的下三角按钮,选择中文[中
Invalidate()方法和UpdateWindow()方法来实现。
• 注意:尽量不要在OnDraw之外的函数调用绘图方法,那些方法不会 在视图需要重新绘制的时候被自动调用。
•
• • • • • • • • •
下面介绍CView类的一些派生类。
CEditView:简单的文本编辑器,类似Notepad。 CListView:基于列表的视图,类似文件夹浏览。 CTreeView:基于树状控件的视图,类似文件浏览左侧的树状结构。 CRichEditView:支持多种字体、OLE和RTF格式的高级编辑器。 CScrollView:支持滚动条视图。 CFormView:窗体视图,支持在上边使用对话框控件。 CRecordView:连接到ODBC数据库的视图。 CDaoRecordView:连接到DAO数据库的视图。 可以在示例7.1中的第(8)步进行设置,当选择相应的类后,可以使得文档 程序拥有相应的功能。
7.2.2 单文档程序的核 心——消息传递
• 在文档、窗口被创建以后,整个应用程序就开始进入Windows的消息循
环。前面已经介绍了Windows的消息传递,当由于文档/视图结构将数据 管理与显示分离,其消息传递更为复杂。一般来说对于Windows标准消
息,例如按下键盘或者单击鼠标,这类消息将传递给框架窗口。文档不
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.1.3 View类
视图类用于显示文档数据,一个文档可以与 多个视图关联,但一个视图只能关联一个文 档,多个视图可共用一个框架窗口,如Word 中可在左边显示目录,右边显示正文,两个 视图共用一个框架窗口。 当文档数据发生改变后,通过文档类的 UpdateAllViews函数通知视图需要更新,在 内部调用View类的OnUpdate函数,默认情 况下,OnUpdate函数在内部调用Invalidate 函数,使整个视图无效并重绘。
7.2.4 右键菜单
右键菜单也称为环境(Context)菜单, 可在屏幕任意位置显示,一般在窗口右 键单击鼠标时弹出。系统的默认消息处 理函数DefWindowProc,在处理 WM_RBUTTONUP和 WM_NCRBUTTONUP消息时,自动发 送WM_CONTEXTMENU消息,可添加 该消息的处理函数,实现右键菜单。 【范例7-3】新建一个单文档工程名为 Sdi062,在视图窗口中使用右键菜单设 置背景色。
7.1.5 类联系方式
(3)在框架(CMainFrame)中访问视 图(View) CSdi061View* pView=(CSdi061View*)GetActiveView(); (4)在框架(CMainFrame)中访问文 档(Doc) CSdi061Doc* pDoc=(CSdi061Doc*)GetActiveDocume nt(); (5)在视图(View)中访问文档(Doc)
7.2 菜单
菜单(Menu)是Windows程序的一个标 准元素,每个菜单项可以包含弹出式子 菜单,可为某个子菜单项添加消息处理 函数,单击该项后,自动调用关联函数。 可以禁用、勾选菜单项,AppWizard自动 生成的单文档程序自带有一个菜单资源, 可修改该菜单资源,添加消息映射函数。
7.2.1 添加菜单资源
7.1.5 类联系方式
(6)在文档(Doc)中访问关联的所有 视图(View) POSITION pos = GetFirstViewPosition(); while (pos != NULL) { CSdi061View* pView = (CSdi061View*)GetNextView(pos); //相关操作 }
7.4.1 设置分区
【范例7-5】新建一个单文档工程名为 Sdi064,在状态栏同步显示鼠标坐标位 置和颜色信息。
7.4.2 更新内容
在程序运行时,可动态更新状态栏窗格 显示的文本,用于显示各种提示信息, 如当前鼠标位置、当前位置的颜色信息 等。SetPaneText函数设置窗格显示的文 本,格式如下: BOOL CStatusBar::SetPaneText(int nIndex,LPCte=TRUE) 参数: nIndex:要更新的窗格的位置索引。 lpszNewText:新文本值。
7.1.1 App类
【范例7-1】新建一个单文档工程名为 Sdi061,了解AppWizard自动生成的几 个类。
7.1.2 Doc类
文档类负责文件的读取和存储,一个文 档可以与多个视图关联,如有一组数据, 在视图1中用表格形式显示,在视图2中 用折线图形式显示,CDocument类提供 两个函数用于循环访问其关联的视图类。 GetFirstViewPosition函数获取与文档关 联的视图列表的第一个视图,格式如下: POSITION CDocument::GetFirstViewPosition() const 返回值:第一个视图的位置。
7.1.3 View类
Invalidate函数设置整个CWnd窗口的客 户区无效,格式如下: void CWnd::Invalidate(BOOL bErase=TRUE) 参数: bErase:是否擦除客户区的背景,默认 为TRUE。 GetDocument函数获取与视图关联的文 档类对象的指针,格式如下: CDocument* CView::GetDocument()
7.1 了解生成类
使用MFC应用程序向导创建一个单文档 程序后,自动生成5个类,其中 CMainFrame、App、Doc、View四个类 是单文档程序的基础支架,CMainFrame 类负责程序窗口的框架显示,包括菜单、 工具栏、状态栏等元素,App类负责程序 的启动和退出,Doc类负责文件的读取和 保存,View类负责数据的显示、编辑, 以及与用户的交互操作等,了解这几个 基本类有助于快速掌握单文档程序的开 发。
7.1.3 View类
ASSERT断言宏用于判断其参数表达式 是否为真,如ASSERT(1==0); 会弹出一 个错误窗口,并退出程序。类似的断言 宏VERIFY具有同样的功能,区别在于 ASSERT宏只能在Debug模式下可用,在 Release版本中失效,而VERIFY宏在 Release版本仍然被执行,但不会中断程 序。 #ifndef和#endif是预编译指令,用于预编 译判断,根据条件决定要编译哪些语句, #ifndef判断是否没有定义某个宏,即if no
7.1.2 Doc类
文档/视图的功能很强大,但也很复杂, MFC框架在后台完成了大量工作,若仅 通过AppWizard自动生成的一些代码,是 无法了解文档/视图如何实现的,有必要 阅读MFC源代码,简要的了解工作流程, 对于自身能力的提升非常有帮助。 注:MFC框架的源代码是公开的,MFC 的函数功能及调用流程,在源代码中得 到完全体现,若不确定某个函数的内部 实现,可打开源代码,找到函数定义处, 阅读后便可柳暗花明。源代码路径
7.1.3 View类
OnPaint函数内部先获取视图窗口的设备 环境,用于在DC上绘制图形。 OnPrepareDC函数在实际绘制图形前调 用,用于设置设备环境的属性。OnDraw 函数用于图形的重绘实现,格式如下: virtual void OnDraw(CDC* pDC) = 0 参数: pDC:设备环境的指针。 CView类中OnDraw函数被声明为纯虚函 数,在派生类中必须重写该函数,否则
7.1.3 View类
非调试版本使用inline关键字声明为内联 函数,在头文件中定义,代码如下: #ifndef _DEBUG inline CSdi061Doc* CSdi061View::GetDocument() //内联函数 { return (CSdi061Doc*)m_pDocument; } #endif
第7章 单文档应用程序
单文档是一种常见的文件处理程序,如 Windows自带的画图、记事本等。相对 于对话框简单的拖放控件,单文档程序 提供强大的文件读取显示功能,其核心 为文档/视图结构,文档用于读取、保存 文件中的数据,视图用于数据的显示、 编辑,在该框架基础上,添加需要的功 能,可快速实现强大的文件处理显示功 能。
【范例7-2】在工程Sdi061上添加菜单资 源,并实现程序运行时,动态添加、移 除、更新、禁用、勾选菜单项。
7.2.2 更新菜单
菜单一般在框架窗口的顶部显示,可在 程序运行时动态改变菜单项,通过 SetMenu和GetMenu函数设置、获取窗 口使用的菜单。 SetMenu函数设置窗口使用的菜单,格 式如下: BOOL CWnd::SetMenu(CMenu* pMenu) 参数: pMenu:新菜单的CMenu类指针,若为 NULL,当前菜单被清除。
7.1.3 View类
当视图窗口失效,或被其他窗口遮盖后 重新显示时,需要重新绘制,Windows 发送WM_PAINT消息到视图窗口,自动 调用OnPaint()重绘函数,函数代码如下: void CView::OnPaint() //重绘函 数 { CPaintDC dc(this); //视图窗口的设 备环境 OnPrepareDC(&dc); //绘制图形前设 置属性
7.3.1 添加工具栏资源
【范例7-4】新建一个单文档工程名为 Sdi063,添加一个工具栏,实现鼠标交 互式绘点、绘线功能。
7.3.3 添加按钮处理函数
若尚未为按钮添加消息处理函数,则按 钮变灰不可用,可使用类向导,为工具 栏按钮添加消息处理函数,实现交互式 绘点、绘线功能。
7.4 状态栏
状态栏作为控制条的一种,一般停靠在 程序窗口的底部,不可移动,常用来显 示各种提示信息,如鼠标经过一个工具 按钮或菜单项时,会在状态栏显示功能 提示信息。不同于工具栏,状态栏只有 一个,可修改系统自带的状态栏,显示 特定信息。
7.2.2 更新菜单
GetMenu函数获取窗口的菜单指针,格 式如下: CMenu* CWnd::GetMenu() const 返回值:菜单的CMenu类指针,若无菜 单返回NULL. DrawMenuBar函数用于重绘窗口的菜单, 应在改变菜单项后调用,格式如下: void CWnd::DrawMenuBar() CMenu类用于操作菜单资源,提供一系 列方法如创建、添加、删除、更新菜单
7.1.3 View类
AppWizard自动生成的CView派生类重定 义了GetDocument函数,且分为Debug 和非Debug内联两种版本,Debug版本在 cpp文件中定义,代码如下: CSdi061Doc* CSdi061View::GetDocument() { ASSERT(m_pDocument>IsKindOf(RUNTIME_CLASS(CSdi061 Doc))); //断言宏 return (CSdi061Doc*)m_pDocument;
7.1.2 Doc类
当文档内容更新后,文档所关联的视图 也应同步更新,UpdateAllViews函数用 于刷新关联的所有视图,格式如下: void CDocument::UpdateAllViews(CView* pSender,LPARAM lHint=0L,CObject* pHint=NULL) 参数: pSender:要更新的视图的指针,若为 NULL更新所有视图。 lHint:包含修改的信息。
7.1.2 Doc类
GetNextView函数获取当前位置视图的指 针,格式如下: CView* CDocument::GetNextView(POSITION& rPosition) const 参数: rPosition:当前视图的POSITION值引用, 调用该函数后,该值指向下一个位置。 注:默认情况下,单文档程序只有一个 文档、一个视图,但可以通过切换视图