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

本文标签: 文档类型对话框使用应用程序