教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

第6章 文本实例(1)

来源:网络收集 时间:2026-05-18
导读: c++中的文本实例 第六章 文本实例(1)主讲教师:贾澎涛 pengtao.jia@http://doc.guandang.net c++中的文本实例 编写一个具有实用功能的字处理软件本篇经典1. 2. 3. 4. 5. 6. 7. 文档和视图是怎样联系起来的? 如何为程序添加查找、替换等功能? 为什么在某些

c++中的文本实例

第六章 文本实例(1)主讲教师:贾澎涛 pengtao.jia@http://doc.guandang.net

c++中的文本实例

编写一个具有实用功能的字处理软件本篇经典1. 2. 3.

4. 5. 6. 7.

文档和视图是怎样联系起来的? 如何为程序添加查找、替换等功能? 为什么在某些程序新创建的菜单中只输入了一个 菜单ID标识就可以实现某一种功能? 为什么在应用程序的菜单中有的菜单是灰的? 怎样为程序添加一个浮动菜单? 如何在“帮助\关于…”对话框中添加系统信息? 怎样为应用程序做一个每日提示(在程序启动时 显示)?

c++中的文本实例

8. 如何动态修改菜单? 9. 怎样为应用程序增加一个日历? 10. 如何使EditSoft应用程序成为多文档程序? 11. 怎样修改应用程序标题栏上的显示文字? 12. 怎样使应用程序以最大化窗口显示? 13. 怎样在应用程序的状态条上显示时间? 14. 如何使应用程序窗口左上角标题栏上的应用程序 图标动起来? 15. 怎样使应用程序支持拖放功能? 16. 怎样建立一个文件打开、保存对话框?

c++中的文本实例

17. 18. 19. 20. 21. 22. 23. 24.

如何使用字体、颜色对话框? 如何处理文字输入? 如何在字处理编辑器中增加一个插入符? 如何使应用程序窗口滚动? 如何处理方向键、翻页键等虚键操作? 如何实现字符串的复制、粘贴? 如何为文档增加打印功能? 如何实现应用程序数据的读出和写入?

c++中的文本实例

6.1 程序创建过程(1)用AppWizard新建一个项目,EditSoft。 (2)在第1步选择单文档类型。 (3)在应用程序生成向导的第2、3步选择保留缺省值。 (4)在第4步改扩展名(通过选择高级选项,你可以用 AppWizard设定支持的文本文档的扩展名为TXT)。 (5)第5步选择保留缺省值. (6)MFC AppWizard-Step 6是生成EditSoft应用程序 的关键,在应用程序新生成的类的列表框中选择视图 类(CEditSoftView),在基类名(Base Class)下拉列表 框选择CEditView类,其与保留缺省值。 (7)选择完成,编译连接并执行EditSoft程序。

c++中的文本实例

1.文档和视图是怎样联系起来的?在文档/视图结构的应用程序中,文档类和视图类 常常需要进行相互之间数据的交换和引用,这就需要 采用一种办法实现两者见数据的通信。视图对象通常 只有一个与之相联系的文档对象,利用它所包含的成 员函数GetDocument()函数可以在视图类中得到与之相 联系的文档。在几乎所有视图类的显示函数 OnDraw(CDC* pDC)中,都有一个指向文档类的指针。 利用它我们就可以对文档类的成员函数以及公共数据 成员进行访问。

c++中的文本实例

打开EditSoft应用程序的视图类CEditSoftView的 实现文件“EditSoftView.cpp”,找到以下代码:void CEditSoftView::OnDraw(CDC* pDC) { CEditSoftDoc* pDoc = GetDocument(); //获取文档数据 ASSERT_VALID(pDoc); // TODO: add draw code for native data here } //

CView::GetDocument CDocument* GetDocument( ) const; Call this function to get a pointer to the view’s document. This allows you to call the document’s member functions.

c++中的文本实例

同样在应用程序的文档类CDocument中也有一 个UpdateAllViews()成员函数,用来向视图类传 递消息。一旦文档数据发生了变化,所有与该 文档相关联的视图都通过此函数取得通知,对 其所显示的的数据进行更新。//CDocument::UpdateAllViews void UpdateAllViews( CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL ); Call this function after the document has been modified.

c++中的文本实例

2.如何为程序添加查找、替换等功能?添加查找功能 (1)打开ResourceView,打开IDR_MAINFRAME; (2)为“编辑”菜单添加“查找”菜单项,并将ID设为 “ID_EDIT_FIND”,注意提示(prompt)编辑框的变化。 (3)编译、连接运行。 添加替换功能 (1)打开ResourceView,打开IDR_MAINFRAME; (2)为“编辑”菜单添加“替换”菜单项,并将ID设为 “ID_EDIT_REPLACE”,注意提示(prompt)编辑框和标 题框的变化。 (3)编译、连接运行。

c++中的文本实例

练习

按照上述办法在“编辑”菜单下加入以下菜 单:菜单名 功能

ID标识

ID_EDIT_CLEARID_EDIT_CLEAR_ALL ID_EDIT_REPEAT ID_EDIT_REDO

删除全部删除 重复 恢复

删除选定的内容删除应用程序中所有的内容 重复上一步操作 恢复上一步操作 选择应用程序中的所有内容

ID_EDIT_SELECT_ALL 全部选择

c++中的文本实例

3.为什么在某些程序新创建的菜单中只输入 了一个菜单ID标识就可以实现某一种功能?

在前面我们为EditSoft应用程序所增加的任何功 能都只在资源编辑中添加了菜单ID标识,而没 有添加任何执行代码,但应用程序的每一个菜 单仍然具有应有的功能。为什么呢? MFC定义的消息进程继承类似于类的继承树。 如果一个类没有提供某个特殊消息的消息处理 函数,则消息通过树传到父类,进程持续下去 直至消息映射所有的基类都被搜索一遍。如果 没有一个类处理该消息,它就由缺省进程处理。

c++中的文本实例

在EditSoft应用程序中,由于其视图类是从CEditView 基类继承而来,在类CEditView中已经对诸如“查找”、 “替换”等功能进行了处理。即使在CEditSoftView中 没有对这些功能进行处理,所定义的ID标识仍将使 MFC追溯到其基类CEditView和CView的消息处理函数, 由基类的处理函数代为响应。 MFC为进一步扩展其重复使用性,它为大多数 Windows应用程序中的应用很广的命令提供了缺省操 作,大多数缺省操作的命令同时也被包含在由 AppWizard产生的缺省菜单中。 以下是在MFC中有缺省操作的菜单命令:

c++中的文本实例

文件菜单:New, Open, Close, Save, Page Setup, Print, Print Preview, Exit等; 编辑菜单:Clear,Clear All, Copy, Cut, Find, Paste, Repeat, Replace, Undo, Redo

等。 视图菜单:Toolbar,Statusbar等 窗口菜单:Arrange Casecade, Tile, Horizontal tile, Vertical tile等; 帮助菜单:Index, Using, Help, About等。

c++中的文本实例

4.为什么在应用程序的菜单中有的

菜单是灰的?

命令更新机制:在程序显示一个菜单前,先检查该菜单的所有条件,再决定如何显示该菜单。

ON_UPDATE_COMMAND_UI 宏:负责将用 户界面元素和命令更新程序连接起来。 CCmdUI(参看MSDN)

c++中的文本实例

5.怎样为程序添加一个浮动菜单?

方法一 (1)在资源编辑器中编辑一个菜单资源,使用缺 省的也可。 (2)打开ClassWizard,为一个窗口类或其派生 类添加消息“WM_CONTEXTMENU”。 (3)在系统生成的消息处理函数中添加如下代码:

c++中的文本实例

CMenu *pFileMenu=GetMenu()->GetSubMenu(2); ClientToScreen(&point); pFileMenu->TrackPopupMenu (TPM_CENTERALIGN|TPM_LEFTBUTTON,point.x,poi nt.y,this) ;

…… 此处隐藏:1945字,全部文档内容请下载后查看。喜欢就下载吧 ……
第6章 文本实例(1).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/1335932.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)