记事本设计说明

上传人:ba****u 文档编号:198606692 上传时间:2023-04-09 格式:DOCX 页数:16 大小:45.03KB
收藏 版权申诉 举报 下载
记事本设计说明_第1页
第1页 / 共16页
记事本设计说明_第2页
第2页 / 共16页
记事本设计说明_第3页
第3页 / 共16页
资源描述:

《记事本设计说明》由会员分享,可在线阅读,更多相关《记事本设计说明(16页珍藏版)》请在装配图网上搜索。

1、记事本设计说明3023001083奚苏立 混合(3)班1.需求分析1.1记事本要求满足一般用户对文本文件编辑的最基本要求。采用菜单和对话框操作,界面简洁友好,用户可直接在文本框中进行文本输入和 编辑,支持所有英文纯文本文件。支持多文件打开处理,块操作,文件之间的操作等。一个类似Edit的Dos程序。1.2记事本功能文件:可在任意时刻打开或新建文件,可将文件另存。也可对打开后的任意文件进行保存关闭。在退出时,对于没有保存的文 件,程序将给予提示。编辑:支持所有块操作。利用菜单或快捷键设置块头,块尾(系统可自动调整相对位置)或取消块定义。有粘贴,拷贝,剪切 等功能。可以在文件之间进行操作。查找:提

2、供查找和替换功能。对于查找,有匹配整个单词和匹配字母大小写两个选项。对于替换,除上两个选项,还有整体替 换选项。(对于查找和替换,对话框已写出,但由于最后时间过紧,因此具体实现代码没有写出)。窗口:可在任意已打开文件之间进行切换。帮助:提供对所有操作的详细说明。几乎所有操作都有对应的快捷键,使用户使用更加方便。2 总体设计 .整个程序共分两大块:Document和View。Document主要负责对文件内容的内部储存和管理。对文本的输入或编辑都由Document负责。它可以将磁盘上的文件按自己内 部格式读入内存,或将编辑内容按纯文本格式保存至磁盘。Document会根据用户对文本的操作对内存中

3、的文件内容进行修改, 如插入,编辑。同时还要储存编辑时的状态信息:如光标的位置,块的定义位置,文件是否保存过等,因此对于翻页,光标移 动等操作,Document都将有所响应。Document还会给View提供足够的信息和操作,如从哪里开始显示,每段的字数,总段数, 光标的位置等。(当然,有的信息可能会用不上)。总之,关于文件内容的一切信息都归于Document。但是,这部分用户是不可 见的,用户并不直接和Document打交道。View主要负责界面的显示和刷新。界面主要分菜单栏,状态栏和编辑栏。菜单栏的显示和对菜单内容的响应是View的基本工 作。有些菜单的操作(如各种块操作或文件的读写)将涉

4、及对Document的修改,因此它将调用Document中的一些函数完成功 能。状态栏本来在编辑时可以显示当前光标位置,但由于时间过紧,省略了这部分。但在操作菜单时,状态栏会显示比较详细 的操作说明。这部分和Document完全没有关系。最后的编辑栏是占屏幕最大的一块。View将根据Document提供的必要信息显 示编辑栏并不断刷新。在这部分中,由于需要比较多的Document信息,因此将这部分显示函数封装在了 Document中(这是两 大块比较关键的衔接部分)。除此之外,View还负责对消息的传递和多文件的管理。一个Document对应一个文件。View需要 管理多个指向Document

5、的指针。对于文件的打开和关闭,除了需要对相应的Document操作外,还需修改View中的Document 指针列表。总之,View将处理一切用户的操作请求并将其反映在屏幕上(这当然需要Document的支持)。3系统模块说明Document:每个文件以段落为基本类进行抽象。如果用大数组表示整篇文章,当在前面插入或删除文字时将会有比较低的效率。当然,以 段落为对象将使一些操作变得比较复杂。class Linefriend class Position;friend class Document; friend class Block; friend class Node;long m_Capa

6、city;每段可容纳字数long m_ChNum; /当前段的字数void m_Increase(long n);/当一段容量不够时扩充容量public: friend class Cursor; char *m_Point;/指向段落文字的指针Line(long i=256,long j=1) m_Capacity=i; m_ChNum=j; m_Point=new chari; m_Point0=0;对空段的初始化Line() delete m_Point;/ 段落析构;以上为段落类声明。特别说明,每段初始时就有0,每段的字数包括0, n储存在下一段的开头,这样做是为了方便某些操作 (如插

7、入和删除回车符)。整篇文章由段落通过双向链表串连而成,因此可以在任意位置访问整篇文章。以下为节点类声明。class Nodefriend class Position; friend class Document; friend class Block;Line *PLine;/指向段落的指针Node *next;指向下一段Node *pre;/指向上一段public:Node(long i=256,long j=1) next=pre=NULL; PLine=new Line(i,j);对节点的初始化实际也是对段落的初始化Node()delete PLine;long PInLine ();

8、用于计算最后一行的字数long NumLine ();/用于计算一段在屏幕上显示的行数;由于在Document类中,还要记录光标,块头,块尾,显示等位置信息,因此声明位置类。对于此类主要是位置操作,如上、下、 左、右、翻页、Home、End等,将以上函数封装。为了便于位置间的比较和通过位置类访问文章内容,重载一些操作符。有一 点特别说明,基于对光标位置的考虑,当光标指向0时,屏幕上显示是在段落末尾第一个空字符处,而指向n时无意义,因 此所有操作都保证位置对象不可能指向n。操作符*被重载为返回当前位置的字符,返回0没有意义,因此位置对象指向0 时将返回 n。class Positionfrien

9、d class Document;friend class Block;protected:Node *node;/指向节点指针long nCh;/在段落中的具体位置void Init(Node *a)node=a;nCh=1;/初始化指向某段开头(使用时实际指向整篇文章开头)void PageDown();向下翻页,改变当前位置信息。void PageUp();向下翻页void Up();/向上移动一行void Down();/向下移动一行void Left();/向左移动一个void Right();/向有移动一个void Home();/移动至行开头void End();移动至行末尾vo

10、id PageD(const Position &p); /如果当前以下不满一页则不翻页 public:Position operator +(); /Right()Position operator -();/Leli()Position operator +(int);Position operator -(int);Position operator -(int n); 左移 n 次bool operator (const Position &p); /bool operator =(const Position &p); /bool operator =(const Position

11、&p);/char operator *();/取得当前位置字符long PInLine ();/当前在行中的位置long NumLine ();/位置所在行数;以下为块类声明。为了使文件之间可以进行块操作,因此剪贴板指针声明为静态变量。为了最后能够正确析构,加入静态变量BlockNum记录对象生成个数。当块头或块尾没有定义时,Position类中的node将被置为空指针。class Blockstatic int BlockNum;/记录所生成的对象个数public:Position BBlock;/ 块头位置Position EBlock;/ 块尾位置static char *ClipBo

12、ard;剪贴板指针Block()BlockNum +;BBlock.Init(NULL);EBlock.Init(NULL);块头块尾都被初始化为NULLBlock()BlockNum-;iK !BlockNum )delete ClipBoard;/删除最后一个对象时删除剪贴板long Size(); 粗略估计储存块头至块尾内容所需容量,大于等于实际所需容量 ;Document *Open(const char *name);Document *New(const char *name);以上两行为新建和打开文件函数声明。由于调用函数时还没有生成对象,因此都为外部函数。由于当使用C+机制打开

13、不存在的文件时,系统会新建文件而无任何异常,因此采用C语言机制读写文件。以下是对Document类的声明class Documentlong m_NumLine; / 总段数char m_FileName50;/ 文件名Node *head; /指向第一段节点的指针Node *end;/指向最后一段节点的指针public:Position m_Cursor;/记录当前光标位置Block m_Block;记录块信息Position display;/屏幕第一行第一字位置char IsChanged;/记录文件是否被改动过bool newfile;/记录文件是否为新建Document(const

14、char *name)head=end=new Node;m_NumLine=1;strcpy(m_FileName,name);IsChanged=0;m_Cursor.Init(head);display.Init(head);构造Document实际是构造一个段落,同时将显示位置和光标位置置于文章开头Document。Node *temp=head-next;while(head!=NULL)delete head;head=temp;temp=temp-next;m_NumLine=0;head=end=NULL; /实际是对双向链表的析构char *FileName(); /返回去处

15、路径的文件名void AddNode(Node *n,Node *Source1,Node *Source2);/在 Sourcel 和 Source2 中插入 Nodevoid DelNode(Node *n);删除n所指向的节点void m_Insert(char c);/在光标位置处插入一个字符void m_Del();删除光标位置处的字符void m_BackSpace();/删除光标前一个位置的字符void DisplayUp();/使Position类的对象display根据实际情况决定是否向上移动一行void DisplayDown();/使Position类的对象display

16、根据实际情况决定是否向下移动一行void DisplayPageUp();/使display向上翻页(直接调用display.PageUp()void DisplayPageDown(); 使 display 向下翻页(直接调用 display.PageDown()void SetBlockHead();设置块头void SetBlockEnd();/设置块尾void CopyBlock();/块复制void PasteBlock();将剪贴板中内容粘贴至光标位置void CutBlock();/剪切块void DelBlock();/删除块void CancelBlock();/取消块voi

17、d Load(FILE *lp);当确定文件存在后,由Open调用读入文件void Save( void );/保存文件void SaveAs(const char *name); / 另存文件bool IsModified()return IsChanged; / 文件是否被修改过bool IsPathSpecified()return !newfile;是否为新建的文件void MessageProcess(KeyInfo key);/对除菜单中的操作外,其它一切编辑框中消息的处理函数void Show();/将Document类中的内容刷新到屏幕上 ;对于Document的操作,最基本的

18、是插入和删除操作。其中比较特殊的是对回车的插入和删除,实际上是对Node的插入和删除。其中需要对段落内容进行合并或分裂操作。同时,当块首或块尾已定义时,这将影响它们的位置,因此这部分需要比较多的代 码处理。其他如块粘贴,块删除,BackSpace操作都以上两个操作为基础。而块拷贝函数则通过重载Position类的操作符*完成。对于DisplayDown等函数,需要决定何时屏幕整体移动。上移只需判断光标和display的相对位置,通过重载操作符完成。对于 下移,需要判断光标是否已越过屏幕范围,这通过调用Position中的PageD()函数完成判断。Show()t通过操作符重载逐字访问内 存,并

19、将显示内容存入数组,当遇到块或块结束需要变色时,将数组内容输出。虽然有光标位置的直接信息,但很难将其直接 映射至屏幕。在Show()函数中采用逐字读取字符的同时寻找光标位置,最后输出。当有异常发生时,如无法打开文件或待存文 件已经存在等,将把异常抛出,由View解决。View:1. 对话框的处理在打开文件,保存文件或查找替换时,不可避免的要出现对话框。整个对话框显示尽管比较复杂,但由很多基本的相同构件,如按钮,标签,选择栏等,先对这些构件进行抽象。class ElemBasepublic:int Top;上边框坐标int Left;/左边框坐标bool TabCapture; /Tab 键状态

20、public:ElemBase( int top , int left );virtual void GetFocus( void ) virtual void LostFocus( void ) virtual void HandleInput( Keylnlo key ) virtual void Display( void ) ;这是所有构件的一个基本公共抽象。除构造函数,其它皆为纯虚函数,其中有些函数在某些构件中可能用不到。以这个基类为基础,从而抽象出按钮,标签栏,选择栏,文本栏:class LabelBox : public ElemBase / ;标签栏public:int Bac

21、kgroundColor; / 底色int TextColor;/ 文字颜色char *Label;/文本内容指针public:LabelBox( int top , int left , const char* , int txtcolor = BLACK , int bkcolor = LIGHTGRAY);virtual void Display( void );/ 显示标签栏LabelBox( void );class TextBox : public ElemBase/ 文本栏public:intBackgroundColor;/底色intTextColor;文字颜色intWidth

22、;/输入文本处宽度char* Text;/文本内容指针int Cursor;/光标位置int DispBegin;/开始显示位置public:TextBox( int top , int lef ,int width , int txtcolor = BLACK , int bkcolor = LIGHTGRAY );TextBox( void );virtual void Display( void );virtual void HandleInput( KeyInfo key ); /对用户的各种案件的响应(消息处理函数)virtual void GetFocus( void ) ;/ 显

23、示文本末尾部分virtual void LostFocus( void );显示文本开头部分;由于用户将在文本栏中输入文字,此类抽象有些类似Document类,也有光标位置和开始显示位置,有些响应也和Document 一 样(如输入,删除等),但显然比Document类要简单很多。class Button : public ElemBase /按钮类 public:int BackgroundColor;/背景色intTextColor;文字颜色intWidth;宽度intHeight;高度char* Text;按钮文字int ButtonType;public:Button( int top

24、 , int left ,const char* text , int buttontype ,int width = 12 ,int txtcolor = BLACK , int bkcolor = GREEN );Button( void );virtual void Display( void );virtual void HandleInput( KeyInfo key );/ 对回车等输入消息处理virtual void GetFocus( void ) ;/通过改变颜色显示当前活动按钮virtual void LostFocus( void );通过改变颜色显示当前非活动按钮;cl

25、ass CheckBox : public ElemBase/选择栏 public:int TextColor;int BackgroundColor;char* Text;bool Checked;是否被选中public:CheckBox( int top , int left , const char* text,int txtcolor = BLACK , int bkcolor = LIGHTGRAY );CheckBox( void );virtual void Display( void );virtual void HandleInput( KeyInfo key );消息处理v

26、irtual void GetFocus( void );调用 Display()lJ新virtual void LostFocus( void );调用 Display()lJ新;所有得基本构件写完后,开始写具体对话框。首先是对所有对话框得基本抽象类WindowBaseclass WindowBasepublic:int Top;int Left;int Bottom;int Right;int Width;int Height;int BKcolor;char TitleSTRMAX;窗口标题ElemBase* ElemListELEMMAX;/窗口中各类构件列表int ElemCurre

27、nt;/当前活动构件int ElemSum;构件总数public:WindowBase( const char* title , int left , int top ,int width , int height , int bkcolor = LIGHTGRAY );virtual void* Display( void* );以下是具体对话框的实现,它们都是WindowBase的继承class WindowOpen : public WindowBase/ 文件打开对话框public:WindowOpen( const char* title , int left , int top ,

28、int width , int height , int bkcolor = LIGHTGRAY );virtual void* Display( void* );文件保存对话框class WindowSaveAs : public WindowBase public:WindowSaveAs( const char* title , int left , int top ,int width , int height , int bkcolor = LIGHTGRAY );virtual void* Display( void* );class WindowFind : public Win

29、dowBase查找对话框public:WindowFind( const char* title , int left , int top ,int width , int height , int bkcolor = LIGHTGRAY );virtual void* Display( void* );class WindowReplace : public WindowBase替换对话框public:WindowReplace( const char* title , int 就,int top ,int width , int height , int bkcolor = LIGHTGR

30、AY );virtual void* Display( void* );class MessageBox : public WindowBase/信息框public:MessageBox( void );int MsgBox( const char* msg , int buttons );再说一下窗口类的消息处理和显示机制。当一个具体窗口对象建立好后,立即通过try调用WindowBase的Display函数 Display 函数集显示和消息处理为一体:首先绘制好窗口的标题和背景,再调用各类构件的Display函数一一加以显示,同时对窗体中默 认的活动构件调用GetFocus()特别显示。然

31、后进入消息处理阶段。当用户键入Tab键时,对当前构件和下一活动构件进行刷新, 当用户键入Enter或ESC键,则当异常抛出,具体处理由各类具体窗口通过Catch处理。当为其它输入时,则调用活动构件的 消息处理函数进行处理。以上是对对话框类的完整描述。2.菜单类这是对菜单类的声明class ToolBarprivate:int m_L1;处于活动状态的根菜单序号int m_L2;处于下拉菜单中的活动项目序号#define SubMenuWidth 25#dehne BaseMenu5各下拉菜单高度#dehne SubFile6/#dehne SubEdit6/#dehne SubSearch2i

32、ntSubWindows;/#dehne SubHelp2char m_FirstLayer 田aseMenuSTRMAX ;/储存根菜单名char m_FileSubFileSTRMAX;储存下拉菜单名char m_EditSubEditSTRMAX;char m_SearchSubSearchSTRMAX ;char m_WindowsFILEMAXSTRMAX;char m_HelpSubHelpSTRMAX;int SubMenuX;int SubMenuY;int SubMenuHeight; /下拉菜单高度char *SubMenu;当前下拉菜单文字首地址StatusBar* m_

33、pSBar;/状态栏文字内容指针public:ToolBar( void )void Initialize( StatusBar* pSBar );对菜单类的 void Show( void );根据参数显示菜单KeyInfo HandleInput( KeyInfo key );对菜单消息的处理void RegisterWindow( const char* filename );在 Windows 菜单中注册文件void DeregisterWindow( int id );/在 Windows 菜单中注销文件;从上面可以看出,菜单栏类中包括状态栏,这是因为选择菜单时将引起状态栏的变化。但

34、是状态栏的具体显示是由View类中调 用状态栏的显示函数。菜单类的消息处理略显复杂。实际上,对于用户的任何输入,都将首先传入菜单类进行处理。当确定菜单处于活动状态时,如果输入是上下左右键,则刷新菜单显示;如果是回车键,则重新对消息赋值,并将消息传出, 交给View类处理;如果输入是ESC键,则将菜单初始化。当输入中有Ctrl控制键时(即快捷键),则效果和菜单活动按下回车键一致。其余情况,说明用户处于编辑状态,则将消息原封不动传出,交给Document类处理。3 View 类万事具备,只欠东风。只差一个将以上所有类融合在一起的View类了。以下将是对View类的完整描述,它是整个程序的最顶层部分

35、,包括Document类,菜单类,状态栏类,以及选择菜单操作所需要 的对话框。更重要的是将这些部分很好的协调在一起。StatusBar*m_SBar;/状态栏ToolBar*m_TBar;/菜单栏private:Document*m_DocListFILEMAX;打开文件指针列表intm_DocSum;文件总数intm_DocCurrent;当前活动文件序号当前活动文件序号class View private:intvoid Show( void );显示,包括显示菜单,状态栏和编辑栏显示,包括显示菜单,状态栏和编辑栏m_DocUnnamed;public:View( void );void

36、Initialize( void );一般初始化函数void Initialize( const char* filename );当采用命令行格式执行程序且后面跟有待编辑文件名时,采用此初始化函数KeyInfo HandleInput( KeyInfo key );消息处理private:以下是对于选择菜单中操作后具体的操作函数,主要通过调用Document类和菜单栏中的以下是对于选择菜单中操作后具体的操作函数,主要通过调用Document类和菜单栏中的函数完成函数完成Document* DeleteDoc( int number );关闭文件void New( void );void Op

37、en( void );void Save( void );void SaveAs( void );void Close( void );void Exit( void );void BlockBegin( void );void BlockEnd( void );void BlockCancel( void );void Cut( void );void Copy( void );void Paste( void );void Find( void );void Replace( void );void Windows( void );void Help( void );void About(

38、 void );;有了 Document, ToolBar和SatusBar的有力支持,View类相对容易很多。View自己只需管理好Document类指针,总文件数 等参数,并对一些异常进行处理。最后看一下Main函数int main( int argc , char* argv) View* MyView = new View;if( argc = 2 ) MyView-Initialize ( argv1);elseMyView-Initialize( );MyView-Show ();Keylnfo key;key = GetInput();while( true ) MyView-H

39、andleInput( key );/消息处理MyView-Show();刷新屏幕key = GetInput();读取消息 getch(); getch();Main极其简单,我们可以看出,它只有三个不断循环的步骤:刷新屏幕,读取消息,消息处理。从而应用户的请求进行运行。4 系统设计难点及其解决.(1) 决定何时移动屏幕文本显示问题。上移比较好办,只要比较光标和display相对位置(通过重载)。对 于下移需要比较display翻页后和光标的相对位置。而对于原先设计的翻页函数,当不满一页时,翻至最后或 第一行。为此新增函数PageD()。当不满一页时不翻页,然后比较相对位置,解决问题。(2)

40、 将内存中的光标位置和屏幕上的光标位置相对应。内存中,有0和n存在。当光标移至n时,无法在屏幕 上显示,因此所有移动函数都保证光标位置不是n。而当重载操作符*时,需要知道n信息而不需要0, 因此当位于0时,*号返回n。但这会导致最后一行和实际不符(可能无回车),但问题不大。(3)为使其他同学使用Document类读取文本信息而不用知道其内部结构,重载了如一, + + ,* , =, =等大量操作符。(4)为了操作更加简便,把 n放在下一段的开头,使0和前面字符连成一体。否则如果n 把0 和前面隔 开会给显示和操作带来很大麻烦。(5)映射光标问题。通过在逐字读取文字的时候寻找光标而避免直接从段落

41、位置直接映射到屏幕的巨大麻烦。(6)消息处理问题。怎样使消息在读入时分配至各块,如编辑块,菜单块,对话框等。同时怎样使系统的消息在块 与块之间交流,协调各部分的运作。从上面可以看出,对于所有的消息,都由View中的Handleinput处理。它 先将消息传给ToolBar,如果ToolBar可以完全处理,则返回空消息。如果菜单没有打开,则消息原样返回, 交给Document中的MessageProcess处理。而对于选中菜单操作的消息,ToolBar处理时会给传出消息重新赋值, 此值将使MessageProcess不予处理,消息继续往下,由View自行处理。例如,当用户需要打开文件时,将弹 出

42、对话框。则经过ToolBar处理的消息值将等于FILE_OPEN,MessageProcess不会处理。同时View调用相应 函数Open()。而Open会调用已经实例化的WindowOpen对象中的Display函数。上面曾提到过,Display函数 集显示和消息处理为一体。就这样,各种消息准确无误的得到响应。(7)读入文件时,如使用C+的文件机制则无法辨别文件是否已经存在,因此文件操作全部使用C机制。(8)对于窗口显示内容的抽象问题。为了使抽象更加便于操作并符合逻辑,整个屏幕抽象为一个View类。其中包 括菜单类,Document类,状态栏类。对话框类不不包括在内,为了达到随叫随到的目的,

43、通过调用成员函数 获得。而其中不同的对话框类由对话框基类继承。基类又被划分为更小的不同窗口构件。通过对这些构件使用 虚函数,使得他们对对话框的接口统一,大大增强了使用的方便性,有利于以后程序的扩展。5总结、这是第一次通过几人的合作编写程序,因此它首先提高了我们的团队合作能力。在写程序时,学以致用,将C+的一些新 特性(如继承,派生,虚函数等)用在了程序中,确实体会到了一些方便之处,使我们对这门语言的理解更为透彻。通过 这次合作,我们也积累了一些开发软件的经验。对于即将开发的软件,首先要有明确的基本功能要求,大概的界面风格,以及一些基本的操作模式(是否支持鼠标,是否 支持命令行格式等),使团队成

44、员对即将开发的软件有一个感性的了解。这部分主要是从用户的角度分析。然后是对开发任务的分配。将大程序划分为几个联系相对比较少的模块,搭建程序的最外层框架。模块之间的接口非常重 要,需要在开始就要商量好。这次设计由于在开始缺乏了比较多的交流,使得设计至中期出了问题,不过后来得到了妥善 解决。接着是对模块的抽象设计。尽量从最基本的构件开始,通过继承派生,最后得出比较复杂的类。对于有着相同“血 缘”的构件尽量使用虚函数,这将使得以后程序设计更加简单顺手,增加了程序的扩展性和升级性。为了便于别人对模块 的访问和使用,需要有良好的封装,可能需要提供一些操作符的重载。同时要有人能够把握全局,使得各模块能够协

45、调运 转(如消息的处理等问题),当然他不必了解细节。总之,需要加强交流。由于这次设计比较匆忙,因此整个程序质量并不很高,遗留下来很多问题。1. 功能太少,没有达到预定要求,缺少对查找和替换的实际支持,状态实际没有显示状态等,(尽管这段代码实际比较 好写),可以以后不断扩充功能。由于程度总体构架比较完善,因此扩充相对比较容易。2. 屏幕刷新速度过慢,尤其是在全屏下,简直难以忍受。这可能由于每次刷新都要涉及菜单和编辑栏,刷新量过大造 成的。3. 虽然程序支持多文件,但支持性不是太好,首先文件指针列表容量最多为99个,菜单中的Window当文件过多时(超 过2会出错。实际上,当文件数远远没有达到99

46、个时,程序就会出错甚至崩溃。但支持20以内的文件数应没问题。(”Edit”只能支持9个文件)4. 程序退出时可能会有原先屏幕内容遗留,不够干净彻底。附录程序使用说明1. 程序的启动可以在我的电脑等浏览器中双击程序图标。也可从命令行进入。如想新建文件直接输入程序名,如想打开文件则后面加路径和 文件名。2. 菜单的使用如果您在编辑状态而想选择菜单时,只需按下ESC键。通过左右键选择根菜单,通过上下键选择下拉菜单中具体内容。选中后 按回车。如您想回到编辑状态,只需再次按下ESC键。3. 文本编辑当您看见光标在编辑窗口中闪烁时就可以进行文本编辑或输入了。支持一切可输入字符,支持Tab键,方向键,翻页键

47、,Home 键,End键。(Home是将光标移至本行开头,End是将光标移至本行末尾九注意,不支持改写和插入状态的切换,一律在插入 状态。4. 程序的退出。选择File下的Exit即可。系统会提示您保存未存文件。以下对各个菜单选项加以说明:(几乎所有的选项都有快捷键,可加快您的操作)FileNew:新建一个文件,系统会给予默认文件名,保存时可以更改。Open:打开一个文件。选择后会出现对话框。您可在输入栏中输入文件名和路径。使用Tab键可在Ok, Cancel和输入栏之间进行 切换。Save:保存当前窗口文件。SaveAs:将当前文件另存为其他文件名。Close:关闭当前文件。系统会提示您保存

48、文件。Exit:退出整个程序。Edit:Block Begin:设置块首位置。Block End:设置块尾位置。Block Cancel :取消块的设置。注意:您不必在乎块头块尾的相对位置,系统会自动调整。当块头块尾都选定后,选定部分将以白底黑字显示。Cut:对当前块做剪切操作。Copy:对当前快做拷贝操作。Paste:粘贴上次复制或剪切的块的内容。注意:以上三种操作都可在文件之间进行。SearchFind:查找所需字符串。选择后将出现对话框,Match Whole Word Only表示全字匹配,Match Case表示区别大小写。可通过 Tab键移动光标位置,通过空格键选择是否选中以上两个

49、选项。Replace:将原字符串替换为目标字符串。在Find what中输入原字符串,在Replace with中输入目标字符串。前两个选项和上面 意义相同。Replace All表示全部替换。Window此菜单中包含当前所有打开文件的文件名。您可以通过上下选择您需要编辑的文件。HelpCommand:对菜单选项的详细解释。About:关于本软件的作者和开发时间。系统开发日制由于本人负责Document类,因此主要是关于这个类的开发日制。7. 4完成对段落和位置类的抽象。7. 5 完成对Document类的抽象。7.68日对Document类及其它相关各类的操作函数完成。7. 9应View类编写同学要求修改了某些结构,重写和增加了一些操作函数。7.10 拿到关于在屏幕上显示Document类的一个简单函数,对所有编写的函数进行调试。7.11 View类编写完毕,正式和View类以及主函数进行连接,经过不断修改和调试取得初步成功。在回家前一晚,排除了关于 屏幕移动显示的故障和低级析构错误。7.12 回家7.13 14完成最终文档。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!