`
buliedian
  • 浏览: 1248926 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

开发文本编辑器学习笔记(未完)

阅读更多

开发文本编辑器学习笔记

第一部分 Introduction

虽然教程的标题是说设计并实现一个文本编辑器,但实际上我们主要是讲如何开发作为一个文本编辑器前端的编辑控件(edit control),当然我们也要写一个小的完整程序来测试这个自定义的控件,而这个完整程序的功能不会超过Windows自带的NotePad。

自定义编辑控件

SDK已经提供一些编辑控件,像edit 和 rich-edit controls,但这编辑控件功能都有限,开发自定义控件目的都是要实现自己想的功能的控件。

无论开发什么样的软件或软件组件(像现在的自定义控件),第一步必须明确软件要实现什么样的功能,这里强调清晰和明确的功能,最好用文字写下来,因为初始设计对最终软件的实现有着重大的影响。本教程的自定义编辑控件有如下的功能:

  • 第一,对文件没有大小限制,并且在对大文件进行行式编辑时对性能影响很小甚至没有影响;
  • 第二,快速和流畅的(图形)显示。包括文本匡选和编辑屏的滚动(scrolling)时的快速和流畅;
  • 第三,语法着色;
  • 第四,剪贴板和拖放操作的支持;
  • 第五,单一字体;
  • 第六,撤消和重做的支持;
  • 第七,对ASCII, Unicode 和 UTF-8 的兼容。

NeatPad的设计与组成

NeatPad由四个组件组成,两个“可见的"和两个"不可见的"。可见的是主窗口(main window)和编辑控件(TextView );不可见是文本文档对象(TextDocument)和文本文件(text file)。

  • 主窗口(main window):主窗口是一个顶层窗口,由标题栏(title)、菜单(menu )和状态栏(status bars)组成,它主要用来面对用户,不直接对文本文件操作;
  • 编 辑控件(TextView ):编辑控件是一个单独的窗口(separate window),并且作为主窗口的子窗口,没有标题栏(title)、菜单(menu )和状态栏(status bars),但有滚动条(scrollbars)。主要功能是显示和处理对文本的编辑,包括处理键盘和鼠标的输入、拖入操作等。
  • 文本文档对象(TextDocument):文档对象只一个数据源,没有可视部分,所以没有窗口的一切属性(没有标题,不接受用户输入),主功能是面对编辑控件,为其提供所需数据(数据怎么组织的?又怎么样提供?)。
  • 文本文件(text file)


各组件间的接口

组件设计体现组件间的“接口(interfaces)”设计。TextView 是面向行(line-oriented)的图形化实体,它的功能只要是显示被更新的数据;而这个操作必须和TextDocument组件交互,从 TextDocument组件读取以“行”为单位的数据。

另一个接口就是TextDocument 和磁盘文件之的接口。与使用一行一行的策略不同,TextDocument要么把整个磁盘文件载入内存,要么再分成可管理的数据块(manageable chunks)。读入的文件的大小的决策可以因情况而定。


TextView 的公共接口——消息发送


第二部分 文本载入与显示

第二部分的目标是把文本文件载入到内存,并且显示到TextView 控件;本部分只完成基本的显示功能,TextView 没有滚动、键盘和鼠标支持。本阶段的代码策略也是很直显的,功能实现没经优化,以易用为原则。

文本文件与文本文档对象(TextDocument )

  • 文本文件除了内容有一些约定(convention)外,与其它二进制文件没什么两样。约定包括不能有不可打印字符(如控制字符)和文本以分隔符(如回车换行符)为界划分成多行。
  • 文本文档对象(TextDocument )则定义成一个C++类的实例。
class TextDocument
{
public:
bool init(char *filename);

ULONG getline(ULONG lineno, char *buf, size_t len);
ULONG linecount();

private:
bool init_linebuffer();

char *buffer;
int length;
};

TextDocument的文件载入功能

类接口
使用了WIN32 API
辅助函数
功能
TextDocument::init(char *filename) CreateFile init(HANDLE hFile) 只打开文件,不载入
TextDocument::init(HANDLE hFile) GetFileSize、ReadFile、CloseHandle init_linebuffer() 载入整个文件到内存
init_linebuffer()

根据文件内容创建行数据缓存(行数组)

TextView 的显示功能对TextDocument 的需求

第一,TextView 控件必须要知道文本的行数,因为TextView 要根据文档的长度来设定滚动条;

第二,TextView必须能够知道何为一行,因为TextView 是以行为单位绘制文本的。

类接口
使用了API函数
辅助函数
功能
TextDocument::init_linebuffer()

根据文件内容创建行数据缓存(行数组)
TextDocument::getline(ULONG lineno, char *buf, size_t len)

memcpy
分享到:
评论

相关推荐

    文本编辑器控件

    文本编辑器控件在软件开发中扮演着至关重要的角色,特别是在需要用户输入或编辑大量文本的应用场景中。本文将深入探讨“文本编辑器控件”的概念、应用以及相关的技术细节。 “文本编辑器控件”通常指的是软件界面中...

    仿简书富文本编辑器

    通过研究这些文件,我们可以深入理解编辑器的工作原理,学习如何自定义和优化富文本编辑器。 5. **应用场景**: 这样的富文本编辑器常用于博客写作应用、笔记应用、论坛或社交应用,让用户能够自由创作和格式化...

    wpf富文本编辑器and源码

    对于想要深入WPF世界或者对富文本编辑器开发感兴趣的开发者来说,这是一个不可多得的学习资源。通过研究这个项目,你可以掌握更多关于WPF架构设计、资源管理以及高效数据存储的知识,从而提升自己的开发技能。

    swift-一个可复用的原生iOS可视化HTML文本编辑器组件

    在iOS应用开发中,为用户提供一个功能丰富的文本编辑器是常见的需求。传统的文本输入控件可能无法满足复杂的需求,例如支持HTML格式的文本编辑。为了应对这种挑战,开发者们常常会寻找或创建可复用的组件来实现可视...

    文本编辑器源码

    文本编辑器是计算机科学领域中一个基础且至关重要的工具,它允许用户创建、修改和查看各种类型的文本文件,包括编程代码、文档、笔记等。在本主题中,“文本编辑器源码”指的是提供了编辑器功能的软件源代码,这通常...

    Android富文本编辑器(高仿简书)

    在Android开发中,富文本编辑器是一个至关重要的组件,它允许用户输入并格式化文本,类似于常见的文字处理软件。"Android富文本编辑器(高仿简书)"是一个专为Android平台设计的开源类库,其目标是模仿简书的文本编辑...

    notepad文本编辑器

    1. **文本编辑器**:文本编辑器是用于创建、修改和查看纯文本文件的软件,不同于富文本编辑器,它们不处理格式化元素,如字体、颜色或大小。Notepad作为一款基础文本编辑器,常用于编写代码、查看日志文件或进行简单...

    C#功能完善的文本编辑器源码+使用说明可做毕设

    C#文本编辑器源码 C#简单文本编辑器是之前记事本应用程序的升级版。在这个应用程序中,您可以轻松创建文本文档。该系统允许您在编辑文本文件或文档时具有更大的灵活性。谈到这个系统,它具有各种功能。它将为您提供...

    Eclipse开发学习笔记.pdf

    ### Eclipse开发学习笔记知识点解析 #### 一、Eclipse工作台(Workbench) Eclipse工作台是Eclipse提供的集成开发环境的核心部分,旨在为开发者创建一个无缝集成的工具集,以便于管理和导航工作空间资源。它是开发...

    软件工程课程设计小型文本编辑器

    总的来说,这个小型文本编辑器项目是学习软件工程和C#编程的理想实践。通过这个项目,学生可以深入了解软件开发的全过程,锻炼编程技巧,同时对软件工程的理论知识有更深入的理解。无论对于初学者还是有一定经验的...

    pap文本编辑器

    在当今快节奏的工作环境下,文本编辑器作为日常使用的工具之一,其重要性不言而喻。如今,一个名为"PAP文本编辑器"的新星在众多编辑器中崭露头角,以其简洁的界面、实用的功能以及1.0版本的完全免费,迅速吸引了广大...

    Java软件开发魔典资源库 学习笔记

    Java软件开发魔典资源库 学习笔记 Java软件开发魔典资源库 学习笔记 Java软件开发魔典资源库 学习笔记 Java软件开发魔典资源库 学习笔记 Java软件开发魔典资源库 学习笔记 Java软件开发魔典资源库 学习笔记 Java软件...

    文本编辑器_文本编辑器_

    在"文本编辑器-管宇杰-2018141461008"这个压缩包文件中,可能包含了关于管宇杰同学对文本编辑器使用的学习资料或项目,比如笔记、代码示例或者个人实现的文本编辑器。通过学习这些内容,可以深入理解文本编辑器的...

    WebEditor文本编辑器

    4. **协作工具**:在团队协作环境中,富文本编辑器可以用于共享文档和笔记,支持多人同时编辑。 四、技术栈与兼容性 WebEditor通常基于JavaScript和HTML5构建,可能利用jQuery等库来简化DOM操作。它应具备良好的...

    移动端强大的富文本编辑器richeditor-android

    在移动应用开发中,尤其是在涉及到内容创作、信息编辑的场景下,一个功能强大的富文本编辑器是必不可少的工具。H5端的富文本编辑器虽然常见,但在原生Android应用中,用户往往需要自行构建复杂的控件组合来实现类似...

    文本编辑器第四版——迷你编辑器(安装文件)

    文本编辑器在编程、写作、记笔记等领域都有广泛的应用,因其简洁高效而受到程序员和作家们的喜爱。 “邮件发送”功能是迷你编辑器新增的一项实用特性。用户现在可以直接在编辑器内部编写邮件草稿,并通过集成的邮件...

    emedSN-文本编辑器-含注册码

    emedSN文本编辑器是一款强大的文本处理工具,相较于普通的文本文档,它提供了更多高级功能,如文本编辑、超链接创建、颜色标记等,极大地提升了用户在文本操作中的效率和便捷性。下面将详细介绍emedSN文本编辑器的...

    GYH.rar_文本编辑器_文本编辑器 c++ 编写

    总的来说,这个“GYH”文本编辑器项目是一个学习C++编程和理解文本编辑器基本原理的好实践。通过实现这样一个项目,开发者不仅可以加深对C++语言的理解,还能了解到文件操作、控制台界面设计以及字符串处理等方面的...

Global site tag (gtag.js) - Google Analytics