admin管理员组文章数量:1533119
2024年6月12日发(作者:)
第4章 视图与对话框
4.1.3编程实例
【例4-1】本例将设计一个简单的文本编辑器(不使用CEditView类),用以说明文档/视图的原理及应用。
在这个编辑器中,用户只能逐行输入字符,按回车键结束一行并换行,不支持字符的删除和插入,也没
有光标指示当前编辑位置。但是用户可以选择编辑器显示文本所使用的字体。
实验步骤:
1. 生成项目
使用AppWizard生成编辑器程序的框架,项目名为Exam4_1。在MFC AppWizard-step 1选择Single
Document;在MFC AppWizard 4 of 6的对话框中,单击Advanced按钮,弹出Advanced Option对话框,
如图4-6所示,该对话框设置文档/视图结构和主框架窗口的一些属性。
图4-6 Advanced Option 对话框
该对话框有两个标签页,一页是Document Template Strings,用于设置文档/视图结构的一些属性,
该项的值将与应用程序类中定义文档模板类对象的第一个参数IDR_MAINFRAME对应,它包括以下几
个文本框:
(1) File extersion
指定应用程序创建的文档所用的文件名的后缀。输入后缀名txt。
(2) File type ID
用于在Windows的注册数据库中标识应用程序的文档类型。
(3) Main frame caption
主框架窗口标题,默认情况下与项目名相一致。
(4) Doc type name
该文档类型名,指定与一个从CDocument派生的文档类相关的文档类型名。
(5) Filter name
用作“打开文件”、“保存文件”对话框中的过滤器。Visual Studio会自动根据输入的后缀名生成一
个过滤器:Exam4_1 文件(*.txt)。这样当在Open File对话框中选择Exam4_1 文件(*.txt)时,只有以txt
为后缀名的文件名显示在文件名列表中。
(6) File new name(short name)
用于指定在new对话框中使用的文档名。当应用程序支持多种文档类型时,选择File->New菜单项
1
VC++6简明教程
会弹出一个对话框,应用程序所支持的所有文档类型供用户选择。选择一种文档类型后,自动创建相应
类型的文档。
(7) File type name(long name)
用于指定当应用程序作为OLE Automation 服务器进使用的文档类型名,使用默认值。
另一标签页是Windows Styles,用于设置主框架窗口的一些属性,包括窗口是否使用最大化按钮,
窗口启动时是否最大化或最小化等。这里使用默认值。
单击Close按钮,关闭Advanced Options对话框。单击Finish按钮,生成应用程序框架。
2. 定义文档类的数据成员
对于一个文本编辑器,增加和删除一行字符是动态的,因此将使用MFC提供的集合类CStringList
来保存文本行信息。CStringList中每一个元素是CString类型的对象,代表一行字符。
另外还需要增加一个数据成员nLineNum用于指示当前编辑行行号。在文档类的头文件
CExam4_1Doc.h中加入以下粗体部分代码:
程序清单4-3:定义文档类的数据成员
class CExam4_1Doc : public CDocument
{
protected: // create from serialization only
CExam4_1Doc();
DECLARE_DYNCREATE(CEX4_1Doc)
// Attributes
public:
CStringList lines;
int nLineNum;
。。。。。。
}
3. 初始化文档类的数据成员
由于文档对象创建后,需要反复刷新而不是反复创建,因此初始化工作放在OnNewDocument()函数
中进行,而不是构造函数中进行,OnFileNew()函数会自动调用OnNewDocument()函数,代码如程序清
单4-4粗体部分所示。
程序清单4-4:初台化文档类的数据成员
BOOL CExam4_1Doc::OnNewDocument()
{ if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
nLineNum=0;
POSITION pos;
pos=dPosition();
while(pos!=NULL)
{
((CString)t(pos)).Empty();
}
All();
2
版权声明:本文标题:Exam4_1说明 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1718200293a652886.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论